排序方法
1、冒泡排序
public static void main(String[] args){
int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
for (int i = 0; i < score.length -1; i++){ //最多做n-1趟排序
for(int j = 0 ;j < score.length - i - 1; j++){ //对当前无序区间score[0......length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的)
if(score[j] < score[j + 1]){ //把小的值交换到后面
int temp = score[j];
score[j] = score[j + 1];
score[j + 1] = temp;
}
}
System.out.print("第" + (i + 1) + "次排序结果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
System.out.println("");
}
System.out.print("最终排序结果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
}
2、选择排序
public static void main(String [] args){
int [] data={32,12,22,42,532,23};
int temp=0;
int log=0;
for(int i=0;i<data.length-1;i++){
log=i;
for(int j=i+1;j<data.length;j++){
if(data[log]>data[j]){
log=j;
}
}
temp=data[i];
data[i]=data[log];
data[log]=temp;
}
for(int i=0;i<data.length;i++){
System.out.println(data[i]);
}
}
3、插入排序
1)插入排序是一种通过不断地把新元素插入到已排好序的数据中的排序算法,常用的插入排序算法包括直接插入排序和shell排序,直接插入排序实现比较简单,时间复杂度是O(n),但是直接插入没有充分的利用已插入的数据已经排序这个事实,因此有很多针对直接插入排序改进的算法,例如折半插入排序等,下边是直接插入排序的Java实现:
public static void insertSort(int[] elements){ for(int i = 1;i <elements.length; i++){ int j = -1; while(j <= i && elements[i] > elements[++j]);//找到element[i]应该摆放的位置,此处可以利用查找算法进行优化 if(j < i){ //将j之后的数据移动一位,然后把elements[i]移动到j处 int temp = elements[i]; for(int k = i-1;k >= j;k--){ elements[k+1] = elements[k]; } elements[j] = temp; } }}1.以h(h一般取n/2)为间隔将n个元素列分为几个小组,在每个小组内按直接插入法排序
2.令h=h/2,重复第1步
3.当h=1时,排序结束(此时相当于直接插入排序,不过由于数据已经基本排好序,因此比较次数和移动次数比直接插入排序少很多)
Shell排序的Java实现如下:
public static void shellSort(int[] elements){ for(int h = elements.length/2;h > 0;h /= 2){ for(int i = h;i < elements.length; i++){ int j = i % h; while(j <= i && elements[i] > elements[j]) j += h;//找到element[i]应该摆放的位置 if(j < i){ //将j之后的数据移动h位,然后把elements[i]移动到j处 int temp = elements[i]; for(int k = i-h;k >= j;k -= h){ elements[k+h] = elements[k]; } elements[j] = temp; } } }}

浙公网安备 33010602011771号