1.插入排序
*直接插入排序
*希爾排序
2.選擇排序
*簡單選擇排序
*堆排序
3.交換排序
*氣泡排序
*快速排序
4.歸併排序
5.基數排序
不穩定排序:簡單選擇排序,快速排序,希爾排序,堆排序穩定排序:氣泡排序,直接插入排序,歸併排序,奇數排序
一.插入排序
將第乙個和第二個元素排好序,然後將第3個元素插入到已經排好序的元素中,依次類推
(插入排序最好的情況就是陣列已經有序了)
二.希爾排序
因為插入排序每次只能操作乙個元素,效率低
元素個數n,取奇數k=n/2,將下標差值為k的數分為一組(一組元素個數看總元素個數決定),在組內構成有序序列,再取k=k/2,將下標差值為k的數分為一組,構成有序序列,直到k=1,然後再進行直接插入排序
三.簡單選擇排序
選出最小的數和第乙個數交換,再在剩餘的數中又選擇最小的和第二個數交換,依次類推
四.堆排序
以公升序排序為例,利用小根堆的性質(堆頂元素最小)不斷輸出最小元素,直到堆中沒有元素
1.構建小根堆
2.輸出堆頂元素
3.將堆低元素放乙個到堆頂,再重新構造成小根堆,再輸出堆頂元素,以此類推
五.氣泡排序
改進1:如果某次冒泡不存在資料交換,則說明已經排序好了,可以直接退出排序
改進2:頭尾進行冒泡,每次把最大的沉底,最小的浮上去,兩邊往中間靠1
六.快速排序
選擇乙個基準元素,比基準元素小的放基準元素的前面,比基準元素大的放基準元素的後面,這種動作叫分割槽,每次分割槽都把乙個數列分成了兩部分,每次分割槽都使得乙個數字有序,然後將基準元素前面部分和後面部分繼續分割槽,一直分割槽直到分割槽的區間中只有乙個元素的時候,乙個元素的序列肯定是有序的嘛,所以最後乙個公升序的序列就完成啦
七.歸併排序
將乙個無序的數列一直一分為二,直到分到序列中只有乙個數的時候,這個序列肯定是有序的,因為只有乙個數,然後將兩個只含有乙個數字的序列合併為含有兩個數字的有序序列,這樣一直進行下去,最後就變成了乙個大的有序數列
八.基數排序
找到最大的數,開個比最大的數大一點的陣列,遍歷每個元素,某個元素為k,則a[k]++,最好遍歷陣列a,a[k]等於多少就輸出多少個k
只能處理整型數
posted @
2019-04-13 10:45
y先森0.0 閱讀(
...)
編輯收藏
八大排序介紹
插入排序是一種最簡單直觀的排序演算法,它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。演算法步驟 1 將第一待排序序列第乙個元素看做乙個有序序列,把第二個元素到最後乙個元素當成是未排序序列。2 從頭到尾依次掃瞄未排序序列,將掃瞄到的每個元素插入有序序列...
八大排序演算法
1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...
八大排序演算法
一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...