插入排序 選擇排序 氣泡排序 希爾排序

2021-09-16 21:22:16 字數 2903 閱讀 5387

引入概念排序穩定性:輸入資料的順序,排序後不能改變。例如,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...