七大排序演算法

2021-07-24 07:04:12 字數 1931 閱讀 5492

七大排序分類:

插入排序:直接插入排序(穩定) --> 希爾排序(不穩定);

選擇排序:簡單選擇排序(穩定) --> 堆排序(不穩定);

交換排序:氣泡排序(穩定) --> 快速排序(不穩定);

歸併排序。

直接插入排序

時間複雜度 : o(n^2)

演算法穩定性:穩定

void straightinsertsort (int a,int n)

}}

氣泡排序

時間複雜度:o(n^2)

演算法穩定性:穩定

1)比較相鄰的兩個元素,如果前面的資料大於後面的資料,就將兩個資料交換;這樣對陣列第0個元素到第 n-1 個元素進行一次遍歷後,最大的乙個元素就沉到陣列的第 n-1 個位置;

2)重複步驟1)直到 i = n - 1;

void bubblesort(int p,int len)

} }}

簡單選擇排序

時間複雜度:o(n^2)

演算法穩定性:穩定

void selectsort(int p,int len)

if(minindex != i)

}}

希爾排序

時間複雜度:o(nlogn )~o(n^2)

演算法穩定性: 不穩定

void shellsort(int p,int len)

p[j + inc] = tmp;

}} }

}

歸併排序

時間複雜度:o(nlogn)

演算法穩定性:穩定

//將有二個有序數列a[first...mid]和a[mid...last]合併。

void mergearray(int a, int first, int mid, int last, int temp)

while (i <= m)

temp[k++] = a[i++];

while (j <= n)

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

for (i = 0; i < k; i++)

a[first + i] = temp[i];

}void mergesort(int a, int first, int last, int temp)

}boolean mergesort(int a, int n)

快速排序

時間複雜度:o(nlogn)~o(n^2)

演算法穩定性:不穩定

void quicksort(int list,int low,int high)

}int partition(int list,int low,int high)

list[low] = pivot;

return low;

}

基數排序

int  radixsort(int nums)

while(maxvalue / exp > 0)

for(int i = 1; i < base; i ++)

for(int i = len - 1; i >= 0; i --)

for(int i = 0; i < len; i ++)

exp *= base;

} return nums;

}

七大排序演算法

氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...

七大排序演算法

首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...

七大排序演算法

基本思想設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序 時空複雜度快速排序的最壞時間為o n 2 平均時間複雜度為o nlgn 在初始陣列近乎有序的狀態下最耗時 快...