資料結構 排序

2021-08-20 04:33:05 字數 3098 閱讀 7456

1,插入排序

基本思想

:這種排序就是充分利用已排好序的元素進行比較和插入

效能分析:

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

空間複雜度:o(1)

穩定性:穩定

這樣遍歷整個陣列就能完成排序

下面是**

//插入排序

void insertsort(int * array,int sz)

if(key3,希爾排序

基本思想:將待排序的序列分為若干組,在每組內進行直接 插入排序,以使整個序列基本有序,然後在對整個序列進行直接插入排序,實質上是一種分組插入。

希爾排序的時間複雜度:o(n*lgn)  (lg是log以2為底)

下面是**

//希爾排序

void shellsort(int * array,int sz)

} }

}

//選擇排序(優化版)

void selectwellsort(int * array,int sz)

if(array[i]

if(max==left) //這是處理最大值在最小位置,或者最小值在最大位置上的情況

//因為將max最大值搬移到了min最小位,所以重新標記max

if(max!=right)//相同位置就不用交換了

left++;

right--;

}}

基本的思想:

對於「」6,3,8,2,9,4,1,5「」這樣乙個陣列,以最後乙個元素為基準值(就是比較值),將這個陣列調整為「」1,3,4,2,5,9,6,8「」,

就是將比基準值小的數5小的值放在5的左邊,將比基準值大的元素放在5的右邊。那麼這個陣列中元素5就排好了,將這個陣列劃分為「」1,3,4,2「」和「」9,6,8「」。對這兩個小陣列也進行上面的操作,排好基準值,再進行劃分,直到小陣列中只有乙個元素時退出。

效能分析:

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

空間複雜度:o(1)

穩定性:不穩定

//快速排序(非遞迴)

void quicksort (int *array,int left,int right)//開區間

}

進行以基準值為中心的簡單排序有3中方式

//找中點函式1(交換法)

int pration1(int *array,int left,int right)

} if(begin!=right-1)

return begin;//返回交點的下標,為作為劃分子陣列的依據

}

//找中點函式2(挖坑法)

int pration2(int *array,int left,int right)

if(end>begin)

while((begin=key)

if(end>begin)

}array[begin]=key;

return begin;

}

//找中點函式3(複雜法)

int pration3(int *array,int left,int right)

{ int key=array[right-1];

int cur=left;//是陣列下標,

int per=left-1;//是陣列下標

assert(array);

//per停下來時,++per對應的值必定是大於基準值的

while(cur6.快速排序(非遞迴)

要用非遞迴方式解決快速排序,就要用棧來儲存陣列的邊界。

基本思想:

找基準值,將整個陣列劃分為兩部分,左邊全部小於或等於基準值,右邊全部大於或等於基準值,再迴圈式的用這種方法分別劃分左右兩部分,直到區間 內只有乙個元素。

迴圈式就是將分割的左右邊界按先右後左的順序入棧,然後出棧的時候先取到左邊界,就可以先出左邊界。

注意:所有區間都是左開右閉

//快速排序(非遞迴)

void quicksortnor (int *array, int size)

{ int left,right,div;

stackd str;

stackdinit(&str);

stackdpush(&str,size);//右邊界入棧(右開)

stackdpush(&str,0); //左邊界入棧(左閉)

while(!stackdempty(&str))//棧空了 ,就排完序了

資料結構 排序

小小總結了下 希望別不記得 排序型別 排序方法 平均時間 最壞時間 最好時間 穩定空間 插入直接插入 o n2 o n2 o n 穩定o 1 希爾排序 o n3 2 增量序列最後為1,只有公因子1 不穩o 1 選擇簡單選擇 o n2 o n2 o n 穩定o 1 堆排序o n lb n o n lb...

資料結構 排序

郝斌版 資料結構 學習筆記 冒泡 公升序,12比,大放後面,再23比,直至最大的在最後面 插入 2,3,4,依次插入值,保證插入值後的序列為有序的 選擇 後面所有的最小值依次排到最前 快速排序 歸併排序 22排,44排,88排.排序演算法標準 時間,空間,穩定性 排序和查詢的關係 排序是查詢的前提,...

資料結構 排序

1.希爾排序 shellsort 增量序列d n為要排序數的個數 void shellinsertsort int a,int n,int dk n個要排序的數,dk是增量 2 堆排序 已知h s m 除了h s 外均滿足堆的定義 調整h s 使其成為大頂堆.即將對第s個結點為根的子樹篩選,para...