选择排序
每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。
for(int i = 0; i<unsortArray.length; i++) {
for(int j=i+1; j<unsortArray.length; j++) {
if(unsortArray[i] > unsortArray[j]) {
int temp = unsortArray[i];
unsortArray[i] = unsortArray[j];
unsortArray[j] = temp;
}
}
}
冒泡排序:
public static int[] sort(int[] unsortArray) {
for(int i = 0; i<unsortArray.length; i++) {
for(int j = 0; j<unsortArray.length-1-i; j++) {
if(unsortArray[j] > unsortArray[j+1]) { //把最大的值放置到最后
int temp = unsortArray[j];
unsortArray[j] = unsortArray[j+1];
unsortArray[j+1] = temp;
}
}
}
for(int k=0;k<unsortArray.length;k++) {
System.out.println(k + ":::" + unsortArray[k]);
}
return null;
}
上述代码的时间复杂度为O(n^2),那么,它相对于选择排序的优势在哪里呢?
答:它的最佳时间复杂度可以调整为O(n),即,当数组本身就是正序的话,那么时间复杂度为O(n),代码如下:
public static int[] sort(int[] unsortArray) {
boolean didswap = false; //增加一个标志位
for(int i = 0; i<unsortArray.length; i++) {
for(int j = 0; j<unsortArray.length-1-i; j++) {
if(unsortArray[j] > unsortArray[j+1]) { //把最大的值放置到最后
didswap = true;
int temp = unsortArray[j];
unsortArray[j] = unsortArray[j+1];
unsortArray[j+1] = temp;
}
}
if(!didswap) {
return unsortArray;
}
}
return unsortArray;
}