目錄
之前的排序總結(一)對插入類和交換類排序作了比較詳細的總結,對於直接插入、希爾排序、氣泡排序、快速排序要求熟練程式設計客棧掌握
這篇排序全面總結(二)主要介紹選擇類排序中的簡單、樹形和堆排序,歸併排序、分配類排序的基數排序
選擇類:每次從待排序的無序序列中,選擇乙個最大或最小的數字,放到前面,資料元素為空時排序結束
動態演示:
演算法講解:
代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...