C語言資料結構與演算法之排序總結 二

2022-09-21 08:27:10 字數 1664 閱讀 4714

目錄

之前的排序總結(一)對插入類和交換類排序作了比較詳細的總結,對於直接插入、希爾排序、氣泡排序、快速排序要求熟練程式設計客棧掌握

這篇排序全面總結(二)主要介紹選擇類排序中的簡單、樹形和堆排序,歸併排序、分配類排序的基數排序

選擇類:每次從待排序的無序序列中,選擇乙個最大或最小的數字,放到前面,資料元素為空時排序結束

動態演示:

演算法講解:

代www.cppcns.com碼:

void selectsort(recordtype r, int length)

/*對記錄陣列r做簡單選擇排序,length為陣列的長度*/

} } /* selectsort */

特點:不穩定排序

時間複雜度o(n*n), 空間複雜度o(1)

靜態演示:

演算法講解:

特點:演算法不作要求

穩定排序, 增加額外的儲存空間

時間複雜度o(nlogn),空間複雜度o(n-1)

動態演示:

演算法講解:

建立初始堆:

void crt_heap(recordtype r, int length )

/*對記錄陣列r建堆,length為陣列的長度*/

調整堆:

void sift(recordtype r, int k, int m)

/* 假設r[k..m]是以r[k]為根的完全二叉樹,且分別以r[2k]和r[2k+1]為根的左、右子樹為大根堆,調整r[k],使整個序列r[k..m]滿足堆的性質 */

/* 繼續篩選 */

} r[i] =t; /* r[k]填入到恰當的位置 */

} 堆排序:

void heapsort(recordtype r,int length)

/* 對r[1..n]進行堆排序,執行本演算法後,r中記錄按關鍵字由大到小有序排列 */

} /* heapsort */

特點:堆選擇是樹形的改進,空間占用較小

不穩定排序,適合n值較大的排序

時間複雜度o(n*程式設計客棧logn),空間複雜度o(1)

法一:將整體數字一分為二,逐層細分

細分完成後,每一塊進行排序,直到整體有序

法二:將一串串行,相鄰的兩個歸併到一起排序,再次把相鄰兩個有序的歸併塊再次排序,直到最後有序(優先推薦這種演算法)

**:void mergesort ( recordtype r, int n) /* 對記錄陣列r[1..n]做歸併排序 */

void msort(recordtype r1, int low, int high, recordtype r3)

/* r1[low..high]經過排序後放在r3[low..high]中,r2[low..high]為輔助空間 */

} /* msort */

特點:穩定排序

時間複雜度o(nlogn),空間複雜度o(n)

附加空間比較大,很少用於內部排序,主要是外部排序

高位優先:按照花色大小分成四類,在每一類中按照面值進行排序

低位優先:按照面值大小分成13類,將相同面值的不同花色進行排序

演算法講解:

特點:時間複雜度o(d*n),d是關鍵字數,n是記錄數

穩定的排序

空間複雜度=2個佇列指標+n個指標域

演算法與資料結構之選擇排序(C語言)

1 include2 include3 void selectsort int a,int n 預宣告要呼叫的函式 4int main void 5 8for k 0 k 10 k 9 printf d x k 10 printf n 11 selectsort x,10 12 for k 0 k ...

資料結構之排序演算法總結

時間複雜度比較 排序演算法名稱 時間複雜度 氣泡排序 比較排序演算法 o n n 選擇排序 比較排序演算法 o n n 插入排序 比較排序演算法 o n n 希爾排序 比較排序演算法 o nlog2n 歸併排序 比較排序演算法 o nlogn 堆排序 比較排序演算法 o logn 快速排序 o nl...

資料結構與演算法 排序總結

這裡討論常用的內部排序 1.直接插入排序 時間複雜度o n 2 void insertsort int a,int size a j x 2.希爾排序 最小增量排序 時間複雜度 void shellsort int a,int size a j x 3.氣泡排序,時間複雜度 o n 2 void b...