引入概念:排序穩定性:輸入資料的順序,排序後不能改變。例如,1,2,3,3,5.排序完若第乙個3和第二個3互換,則為不穩定。
1.插入排序(穩定)
解釋:像打撲克時整理牌時一樣,遇到小牌就插在前面比他大的前面,而後面的牌順次後移;直到處理完最後一張牌。
優點:比氣泡排序只能處理相鄰資料更為靈活,適用於資料在一定距離之間排序較為整齊,可以極大提高效率。
#include
#include
#include
#include
#include
using namespace std;
void
insertsort
(int a,
int n)
//插入排序
a[j+1]
=v;}
}void
printarr
(int a,
int n)
//遍歷陣列
cout<}int
main()
insertsort
(a,n)
;printarr
(a,n)
;return0;
}
2.氣泡排序(穩定)
解釋:從後往前,比較相鄰的元素,若不符合條件,則呼叫swap函式交換資料。外迴圈一次,將最小的放到第一位置,重複到最後乙個元素歸位。
優點:**實現較為簡單,但處理資料不靈活,只能處理相鄰元素。
#include
#include
#include
#include
#include
using namespace std;
void
bubblesort
(int a,
int n)
//氣泡排序
}void
printarr
(int a,
int n)
//遍歷陣列
cout<}int
main()
bubblesort
(a,n)
;printarr
(a,n)
;return0;
}
3.選擇排序(不穩定)
解釋:找到乙個最小的就替換第乙個元素,第二次找第乙個之後的最小值,替換第二個元素。。。。
注意:外層迴圈為0~n-1。
優點:放眼全域性,冒泡為區域性。由於選擇替換的大幅度性,會造成排序的不穩定。
#include
#include
#include
#include
#include
using namespace std;
void
selectsort
(int a,
int n)
//選擇排序
}void
printarr
(int a,
int n)
//遍歷陣列
cout<}int
main()
selectsort
(a,n)
;printarr
(a,n)
;return0;
}
4.希爾排序(穩定)
解釋:其實就是將插入排序進行了公升級,將間隔由普通插入函式的1,變為了動態的3*n+1,經過一次外迴圈,他就會整齊一點,直到執行到g=1時,基本已經排的差不多了,so,此排序具有插入排序的優點,又解決了數列不太整齊時普通插入複雜度高的問題。每外迴圈一次,下一次的內迴圈就會少很多步驟。是集中了許多優點的排序演算法。他的寫法就是插入排序和g的取值函式的集合。
缺點:相較於前三種,這個排序寫起來略有複雜。
#include
#include
#include
#include
#include
#include
using namespace std;
vector<
int> g;
int a[
10000000];
void
insertsort
(int a,
int n,
int g)
//插入排序
a[j+g]
=v;}
}void
sellsort
(int a,
int n)
//希爾排序,g陣列儲存間隔數,如:1,4,13,3*n+1....
for(
int i=g.
size()
-1;i>=
0;i--)}
void
printarr
(int a,
int n)
//遍歷陣列
cout<}int
main()
//insertsort(a,n);
sellsort
(a,n)
;printarr
(a,n)
;return0;
}
氣泡排序,插入排序,選擇排序,希爾排序
在另外的文章中介紹了快速,堆,歸併排序,這三個排序都是高效的排序,下面介紹一些時間複雜度為o n 2 的排序。氣泡排序,顧名思義,就是將小的元素往上冒,大的元素往下沉,實際在變成的時候用的是大的元素往下沉的方法。每一趟過後,都有乙個最大的元素被沉到底。下一次排序時陣列規模減少了1。主要應用到了相鄰兩...
java 氣泡排序 選擇排序 插入排序 希爾排序
最壞均時間複雜度o n 2 整個陣列都是逆序的情況 最好情況o n 整個陣列都已經是順序的情況 對應version3,version1 2不是 public static void main string arg 小到大 version 2 for int i 0 i i j 小到大 version...
排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)
工作原理 1 比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個 2 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數 3 針對所有的元素重複以上的步驟,除了最後乙個 4 重複步驟1 3,直到排序完成。obj 10,4,29,5,7,80,34,19,8...