常用的排序演算法的時間複雜度和空間複雜度
排序法
最差時間分析
平均時間複雜度
穩定度
空間複雜度
氣泡排序
o(n2
)o(n2
) 穩定
o(1)
快速排序
o(n2
)o(n*log2
n) 不穩定
o(log2
n)~o(n)
選擇排序
o(n2
)o(n2
) 穩定
o(1)
二叉樹排序
o(n2
)o(n*log2
n) 不一定
o(n)
插入排序
o(n2
)o(n2
) 穩定
o(1)
堆排序o(n*log2
n) o(n*log2
n) 不穩定
o(1)
希爾排序oo
不穩定
o(1)
排序是指將乙個無序序列整理成按值非遞減順序排列的有序序列,即是將無序的記錄序列調整為有序記錄序列的一種操作。1、
交換類排序法(方法:
氣泡排序,
快速排序)。2、
插入類排序法(方法:簡單
插入排序,
希爾排序)。
3、選擇類排序法(方法:簡單選擇排序,堆排序)。
**與分析如下:
1 交換類排序:
(1)氣泡排序
//氣泡排序法,穩定的排序, o(n^2)(冒大泡)
#include int main (void)
;//陣列
int n = 0;//次數計算變數
int out = 0; //計算已經排好的數值的數量
int len = sizeof (a) / sizeof (int);//陣列長度
for (i = 0; i < len; ++i)//從第i(起始0)個數開始
else continue;//否則跳出當次迴圈,讓a[i]去比較a[j]的下乙個數值 ,直到找到最大值為止
} ++out;//每算出乙個就自增一次
} for (i = 0; i < len; ++i)//列印結果
printf ("count = %d\n",n);
return 0;
}
(2) 快速排序法
//快速排序o(log2^n)
#include void myqsort (int a, int num)}}
a[i] = val;//確定基準值在陣列a中的排序位置,此時,基準值前的值都比基準值小,而後的都比它大。
myqsort(a,i);//遞迴快排基準值前的陣列,
myqsort(a+i+1,num-i-1);//遞迴快排基準值後的陣列。a+i+1的加一和 num-i-1的減一是為了不用對a[i]排序的
}} int main (void)
;//比較的陣列
int i = 0;
int len = sizeof (a) / sizeof (int);//確定長度
myqsort(a,9);//排序
for ( ; i < len; ++i)//列印
printf ("\n");
return 0;
}
屬於學習筆記,純原創,僅供學習。
**沒有優化,有空再優化,結果無誤就是了...歡迎大神們前來指點...
排序 排序演算法1
所謂氣泡排序就是,一組資料,以遞增的順序來說明,從第乙個數data 0 開始,依次和後面的資料比較大小,如果data 0 大於當前位置上的數就和這個數交換位置並繼續和後面的數相比,如果遇到比自己大的數了,就不交換 下一次開始的位置是data 1 然後依次往後推。void myswap int num...
排序演算法 1 選擇排序演算法
這篇部落格分為兩個部分 選擇排序演算法基本思想 實現與解析 由於這個排序演算法比較簡單,因此這篇博文就不做過多解釋了 一.選擇排序演算法基本思想 1 選擇排序 小到大排序 1.遍歷所有未排序的元素 找到最小的那個元素 2.將這個元素與未排序序列的第乙個元素交換位置 3.當剩下乙個元素時 排序結束 o...
排序演算法 1
二 高階排序演算法 高階排序演算法中我們將只介紹這一種,同時也是目前我所知道 我看過的資料中 的最快的。它的工作看起來仍然象乙個二叉樹。首先我們選擇乙個中間值middle程式中我們使用陣列中間值,然後 把比它小的放在左邊,大的放在右邊 具體的實現是從兩邊找,找到一對後交換 然後對兩邊分別使 用這個過...