各種排序演算法

2021-08-09 03:22:28 字數 1613 閱讀 7152

最早接觸到得排序演算法,也是最熟悉的,效率可能也是最低的。它是穩定的,時間複雜度為o(n*n),空間複雜度為o(1)。

演算法思想:

相鄰資料比較,最大/小沉到最後。

核心**:

for(int i=0;i

length;i++)

for(int j=1;j

length-i;j++)

if(a[j-1]>a[j])

swap(a[j-1],a[j]);

插入排序也是穩定的,平均空間,時間複雜度都和冒泡一樣。

演算法思想:

將待排序的資料插入已排好的序列中。

核心**:

for(int i=1;i

length;i++)

for(int j=i-1;j>=0&&a[j]>a[j+1];j--)

swap(a[j],a[j+1]);

這是乙個不穩定的排序演算法,平均時間複雜度為o(nlog2n),空間複雜度為o(1)

演算法思想:

將資料分為若干組,然後進行插入排序。

核心**:

//將直接插入排序的1換成gap

for(int gap=n/2;gap>0;gap/=2)

for(int i=gap;ifor(int j=i-gap;j>=0&&a[j]>a[j+gap];j-=gap)

swap(a[j],a[j+gap]);

不穩定,o(n2),o(1)

演算法思想:

從無序區選最小的資料放在有序區最後,感覺很像冒泡,把最小的資料冒到最上面,但是不同的是選擇排序是用陣列的下標來確定位置,不是一次次交換資料。

核心**:

for(int i=0;iint

min = i;

for(j=i+1;jif(a[j]min])

min = j;

swap(a[i],a[min]);

}

穩定,o(nlogn),o(n)

演算法思想:

將有序數列合併。先遞迴,再合併。速度比冒泡、插入快很多。

//遞迴

void merge(int a,int first,int

last,ing t)

}//將兩個有序數列合併

void merge_array(int a,int first,int mid,int

last,int temp)

while(f<=m)

temp[k++] = temp[k++];

while(j<=l)

temp[k++] = temp[j++];

for(f=0;fa,int left,int right)

a[l] = temp;

quick(a,l,l-1);

quick(a,l+1,r);

}}

我認為最難的排序,看了好久都沒看懂,現在繼續去看t_t

排序 各種排序演算法

每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子表中適當位置,直到全部記錄插入完成為止 待排序的記錄放在陣列r 0,n 1 中 排序過程中將r分成兩個子區間,有序區r 0,i 1 無序區r i,n 1 將當前無序區的第1個記錄,插入到有序區中適當的位置上 每次是有序區增加乙個記錄,知道...

各種排序演算法

交換函式 void swap int a,int b 氣泡排序 氣泡排序 bubble sort,台灣譯為 泡沫排序或氣泡排序 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排...

各種排序演算法

include include include using namespace std void swap int a,int b void output int a,int n 直接插入排序 時間複雜度o n 2 void insertsort int a,int n 折半插入排序 o n 2 只...