以下排序都以從小到大排序為例
1.氣泡排序:
氣泡排序就是從第乙個元素開始,對每乙個元素與它之後所有的元素進行比較,將較小的乙個放在前,大的放在後
氣泡排序兩層迴圈(一般排序都是兩層迴圈),內層迴圈有兩種寫法,形式稍稍不同,但排序結果相同:
第一種for(int i=0;ia[j])
}//for(int j=0;j這裡內層迴圈j從i+1開始,j++,從前向後遍歷,上面注釋掉的部分是用來看每排完一輪的排序結果,舉例一組執行結果:
輸入的n=10,陣列a:1, 23, 45, 2, 55, 7, 9, 10, 12, 40
每一輪排序結果:
1 23 45 2 55 7 9 10 12 40
1 2 45 23 55 7 9 10 12 40
1 2 7 45 55 23 9 10 12 40
1 2 7 9 55 45 23 10 12 40
1 2 7 9 10 55 45 23 12 40
1 2 7 9 10 12 55 45 23 40
1 2 7 9 10 12 23 55 45 40
1 2 7 9 10 12 23 40 55 45
1 2 7 9 10 12 23 40 45 55
最終結果:
1 2 7 9 10 12 23 40 45 55
可以看到每一輪排完,都可以確定乙個當前剩餘元素中的最小數將它放在對應的位置,直到最後一輪排完最後乙個元素
第二種for(int i=0;ii;j--)
}for(int j=0;j內層迴圈j從n-1開始,j–,直到i+1,從後向前遍歷
同樣輸入的n=10,陣列a:1, 23, 45, 2, 55, 7, 9, 10, 12, 40
每一輪排序結果:
1 23 45 2 55 7 9 10 12 40
1 2 45 23 55 7 9 10 12 40
1 2 7 45 55 23 9 10 12 40
1 2 7 9 55 45 23 10 12 40
1 2 7 9 10 55 45 23 12 40
1 2 7 9 10 12 55 45 23 40
1 2 7 9 10 12 23 55 45 40
1 2 7 9 10 12 23 40 55 45
1 2 7 9 10 12 23 40 45 55
最終結果:
1 2 7 9 10 12 23 40 45 55
兩種寫法無論過程還是結果都一模一樣
2.插入排序:
就是遍歷每個元素,對每個元素實現這個元素之前所有元素由大到小排列,為什麼叫插入排序呢?這種排序就像先排好一段的順序後再加入元素,再排序,不斷重複直到排完所有的元素。【我認為和遞迴很像,例如剛開始i=1,從第二個元素開始,向前排序,小的在前,大的在後,這樣排好了2個,對第3個元素,向前遇到更小的就交換順序,這樣就排好了3個,以此類推,就可以排好所有的元素】
for(int i=1;i0&&tem看一下注釋行顯示的執行結果
輸入n=10,陣列a:1, 23, 45, 2, 55, 7, 9, 10, 12, 40
執行過程:
1 23 45 2 55 7 9 10 12 40
1 2 23 45 55 7 9 10 12 40
1 2 23 45 55 7 9 10 12 40
1 2 7 23 45 55 9 10 12 40
1 2 7 9 23 45 55 10 12 40
1 2 7 9 10 23 45 55 12 40
1 2 7 9 10 12 23 45 55 40
1 2 7 9 10 12 23 40 45 55
最終結果:
1 2 7 9 10 12 23 40 45 55
每排一輪可以發現有序的序列元素個數+1
3.選擇排序:
這個排序理解比較簡單,就是不斷尋找剩餘元素中最小的元素,把它排在前面
for(int i=0;i輸入n=10
執行過程:
1 23 45 2 55 7 9 10 12 40
1 2 45 23 55 7 9 10 12 40
1 2 7 23 55 45 9 10 12 40
1 2 7 9 55 45 23 10 12 40
1 2 7 9 10 45 23 55 12 40
1 2 7 9 10 12 23 55 45 40
1 2 7 9 10 12 23 55 45 40
1 2 7 9 10 12 23 40 45 55
1 2 7 9 10 12 23 40 45 55
1 2 7 9 10 12 23 40 45 55
最終結果:
1 2 7 9 10 12 23 40 45 55
其實可以發現,以上三種排序方法執行過程輸出都相同,尤其後兩種,插入排序和選擇排序思路很相似。
以上是比較排序中比較簡單的三種排序方法
氣泡排序 插入排序 選擇排序的原理及比較
public class test bubblesort arr selectsort arr insertsort arr for int i 0 i arr.length i 氣泡排序 從初始位置開始,與相鄰的數進行比較,前面的數大於後面的數,進行交換,得到較大的數之後,這個數繼續跟後面相鄰的數...
直接插入排序和氣泡排序比較
思想 將陣列中的所有元素依次和前面的已經排好序的元素相比較 依次 如果選擇的元素比已排序的元素小,則交換,直到全部元素都比較過。實現 sort.h pragma once include using namespace std include 直接插入排序 void insertsort int a...
冒泡,選擇,插入排序的效率比較
思想 每次將最大的數字移動到陣列的最後面。比較複雜度和操作複雜度都較高。實現 public static void bubblesort int arr 思想 假設每次最小值 最大值 為第乙個,然後遍歷之後的元素,若有更小的元素,則該元素的下標就為minindex。最後,將最小的值換至第乙個 i 位...