`
nicegege
  • 浏览: 588282 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

排序算法

阅读更多

直接插入排序:和自己前面的数比较,如果发现大于自己的,数组往后移一个位置,空出来的位置放自己的值。

直接选择排序:和自己后面的数比较,如果找到小于自己的最小数,元素转换。

冒泡排序:相邻的两个元素相互比较,如果不满足条件元素相互转换。

快速排序:把数组分为两部分,值高于参考值的和值低于参考值的,这样不断地递归排序。下面是我练习的代码:

写道
package my.sort;

public class Sort {

/**
* @param args
*/
/*public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26};
if(Sort.sort(a).length>0){
int[] b=Sort.sort(a);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}

}*/
/*public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26,25};
if(Sort.chooseSort(a).length>0){
int[] b=Sort.chooseSort(a);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}

}*/
/*public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26,25,24};
if(Sort.bubbleSort(a).length>0){
int[] b=Sort.bubbleSort(a);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}

}*/
public static void main(String[] args) {
int[] a={35,32,31,30,29,28,27,26,25,24,23,22};
if(Sort.quickSort(a,0,a.length-1).length>0){
int[] b=Sort.quickSort(a,0,a.length-1);
for(int m=0;m<b.length;m++){
if(m==b.length-1)
System.out.print(b[m]);
else
System.out.print(b[m]+" ,");
}
}

}

//直接插入排序
private static int[] sort(int[] a){
//获取数组元素
for(int i=0;i<a.length;i++){
//获取下标小于自己的数组元素
for(int j=0;j<i;j++){
//发现数值大于自己值的数组元素
if(a[i]<a[j]){
int temp=a[i];//保存自己值
for(int k=i;k>j;k--)
a[k]=a[k-1];//数组元素往后移一个位置
a[j]=temp; //保存的值放进去
}

}

}
return a;
}
//直接选择排序
private static int[] chooseSort(int[] a){
//获取数组元素
for(int i=0;i<a.length;i++){
int k=i;
for(int j=i+1;j<a.length;j++){//获取下标大于自己下标数组元素
if(a[j]<a[k])//发现数值小于自己数值的元素,保存其下标
k=j;

}
//找到了最小的数值,转换位置
if(k!=i){
int temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
return a;

}
//冒泡排序
private static int[] bubbleSort(int[] a ){
//遍历数组
for(int i=0;i<a.length-1;i++){
//数组元素与其后面的数组元素比较数值大小,发现值大于后面的,转换位置
for(int j=0;j<a.length-i-1;j++){
if(a[j+1]<a[j]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}

}
return a;
}
//快速排序
private static int[] quickSort(int[] a,int low,int high){
int i,j,temp;
if(low<high){
i=low;
j=high;
temp=a[i];
while(i<j){
/*临时变量temp从数组最后一个元素开始比较,
情况A.直到发现小于或等于temp的元素停止,j就是这个元素的下标,
情况B.没有发现j会变成j=i*/
while(i<j&&a[j]>temp) j--;
//情况A下,值较小的下标为j的元素放在下标i的位置
if(i<j){
a[i]=a[j];
i++;//i加1
}
/*临时变量temp从其后面的数据元素开始比较,
情况A.直到发现大于或等于temp的元素停止,i就是这个元素的下标,
情况B.没有发现i会变成i=j*/
while(i<j&&a[i]<temp) i++;
//情况A下,值较大的下标为i的元素放在下标j的位置
if(i<j){
a[j]=a[i];
j--;//j减1
}

}
a[i]=temp;//确定临时变量temp在数组a中的升序位置
//值为小于temp的数据元素快速排序
quickSort(a,low,i-1);
//值为大于temp的数据元素快速排序
quickSort(a, i+1, high);
}
return a;

}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics