冒泡排序:規則就是前後比較,找到最大的放在最右端,然後依次循環比較。。。。其中需要兩個循環來完成該任務,外層循環標記比較的趟數,內層循環標識每一趟需要交換元素的下標。關鍵需要設置一個標識位,用來標識在某一趟中,是否有交換,如果沒有交換,說明已經排好序了,就可以直接停止遍歷循環比較了。
public class BubbleSort {
public static int[] sort(int [] array){
// 這裏for循環表示總共需要比較多少輪
for (int i = 1; i <array.length ; i++) {
// 設置標記,若爲true,則表示此次循環沒有進行交換,也就是排序已經完成
boolean flag = true;
// 這裏for循環表示每輪比較參與的元素下標
// 對當前無序的數組進行排序
// j的範圍很關鍵,隨着輪數的增加,j的範圍會不斷縮小
for (int j = 0; j <array.length-i ; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = false;
}
}
if(flag){
break;
}
// 第i輪的交換結果
System.out.println("第"+i+"輪排序後的結果");
display(array);
}
return array;
}
public static void display(int [] array){
for (int i = 0; i <array.length-1 ; i++) {
System.out.print(array[i]+ " ");
}
System.out.println();
}
public static void main(String[] args) {
int [] array ={2,1,4,10,12,3,5,7,6,9,8};
System.out.println("未排序的結果");
display(array);
int[] sort = sort(array);
System.out.println("排序的結果");
display( sort);
}
}
冒泡排序的時間複雜度:
最好的情況是比較一趟並沒有交換,則時間複雜度爲O(n);
最差時間複雜度爲每一趟都需要交換,則n+n-1+.....+1=n(n-1)/2即O(n^2)
選擇排序:
選擇排序是每次從待排序的元素中選出最小的元素,存放在序列的起始位置,直到全部待排序的數據元素排完。
分爲三步:
1.從待排序列中,找到最小的元素
2.如果最小的元素不是待排序序列的第一個元素,將其和第一個元素交換位置
3.從餘下的N-1個元素中,找出最小的元素,重複(1)、(2)步,直到排序結束。
package 數據結構;
public class ChoiceSort {
public static int [] sort(int [] array){
// 總共需要經過length-1輪的比較
for(int i =0; i<array.length-1;i++){
int min = i;
//每輪需要比較的次數
for(int j = i+1; j<array.length;j++){
if(array[min]>array[j]){
min = j;//記錄目前能找到的最小值的下標
}
}
// 找到最小值和i位置所在的值進行比較,如果不同,則需要進行交換值
if(i!=min){
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
System.out.println("第"+(i+1)+"輪排序的結果");
display(array);
}
return array;
}
// 遍歷數組元素
public static void display(int [] array){
for (int i = 0; i <array.length-1 ; i++) {
System.out.print(array[i]+ " ");
}
System.out.println();
}
public static void main(String[] args) {
int [] array ={2,1,4,10,12,3,5,7,6,9,8};
System.out.println("未排序的結果");
display(array);
int[] sort = sort(array);
System.out.println("排序的結果");
display( sort);
}
}
選擇排序的時間複雜度與冒泡排序的時間複雜度相同。
插入排序