在C中,排序算法是最基本最常用的算法,不同的排序算法在不同的場景或應用中會有不同的表現,接下來小編搜集了各種排序方法復雜度總結,歡迎查看。
一、冒泡排序
主要思路是:
通過交換相鄰的兩個數變成小數在前大數在后,這樣每次遍歷后,最大的數就“沉”到最后面了。重復N次即可以使數組有序。
代碼實現
void bubble_sort(int arr[], int len)
{
for (int i = 0; i < len — 1; i++)
{
for (int j = len — 1; j >= i; j——)
{
if (arr[j] < arr[j — 1])
{
int temp = arr[j];
arr[j] = arr[j — 1];
arr[j — 1] = temp;
}
}
}
}
冒泡排序改進1:
在某次遍歷中,如果沒有數據交換,說明整個數組已經有序,因此通過設置標志位來記錄此次遍歷有無數據交換就可以判斷是否要繼續循環。
冒泡排序改進2:
記錄某次遍歷時最后發生數據交換的位置,這個位置之后的數據顯然已經有序。因此設置標志位記錄每次遍歷中最后發生數據交換的位置可以確定下次循環的范圍。
二、直接插入排序
主要思路是:
每次將一個待排序的數組元素,插入到前面已排序的序列中這個元素應該在的位置,直到全部數據插入完成。類似撲克牌洗牌過程。
代碼實現
void _sort(int arr[], int len)
{
for (int i = 1; i < len; i ++)
{
int j = i — 1;
int k = arr[i];
while (j > —1 && k < arr[j] )
{
arr[j + 1] = arr[j];
j ——;
}
arr[j + 1] = k;
}
}
本文來源:http://www.nvnqwx.com/shiyongwen/zongjie/436629.htm