排序演算法(1)

2021-06-26 12:50:49 字數 1823 閱讀 1886



常用的排序演算法的時間複雜度和空間複雜度

排序法

最差時間分析

平均時間複雜度

穩定度

空間複雜度

氣泡排序

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程式中我們使用陣列中間值,然後 把比它小的放在左邊,大的放在右邊 具體的實現是從兩邊找,找到一對後交換 然後對兩邊分別使 用這個過...