1、直接插入排序:把後面未排序部分的首個數插入到前面已排序部分的正確位置上去,直到全部排好順序。直接插入排序是穩定的,演算法時間複雜度o(n^2)。
2、shell排序:將要排序的一組數按某個增量g分成若干組,每組中記錄的下標相差g。對每組中全部元素進行直接插入排序,然後縮小增量g,在每組中再進行排序。當增量減到1時,整個要排序的數被分成一組,排序完成。shell排序是不穩定的,演算法時間複雜度可改進到o(n^1.25)左右。
3、氣泡排序:對前面未排序部分每相鄰的兩個數進行比較和調整,讓較大的數上浮到後面已排序部分的開頭。氣泡排序是穩定的,演算法時間複雜度o(n^2)。
4、快速排序:掃瞄一次元素並不斷地交換,使右邊部分的各個數都比左邊部分大。然後用同樣的方法處理這兩個子串行(用遞迴呼叫)。快速排序是不穩定的,最理想情況演算法時間複雜度o(nlgn),最壞為o(n^2),空間複雜度需要o(nlgn)。
5、選擇排序:在後面未排序的部分中選擇最小的數插入到前面已排序部分的末尾。直到倒數第二個數和最後乙個數比較為止。選擇排序是
不穩定的,演算法複雜度o(n^2)。
6、堆排序:是對選擇排序的改進。把陣列看作是二叉樹,x[k]的兩個子樹為元素x[2k]與x[2k+1]。堆是一棵樹,每個節點的數值不小於其後代節點的數值。初始時把要排序的數的序列看作是一棵順序儲存的二叉樹,調整它們的儲存順序,使之成為乙個堆,這時堆的根節點的數最大。然後將根節點與堆的最後乙個節點交換。然後對前面n-1個數重新調整使之成為堆。依此類推,直到只有兩個節點的堆,並對它們作交換,最後得到有n個節點的有序序列。堆排序是不穩定的,演算法時間複雜度o(nlgn)。
注意堆排序需要兩個過程,一是建立堆,二是堆頂與堆的最後乙個元素交換位置。所以堆排序有兩個函式組成,一是建堆的調整函式,二是反覆呼叫實現排序的函式。
7、歸併排序:設兩個有序的子串行(相當於輸入堆)放在同一向量中相鄰的位置上r[low…m],r[m+1…high],先將它們合併到乙個區域性的暫存向量r1(相當於輸出堆)中,待合併完成後將r1複製回r[low…high]中。歸併排序是穩定的,演算法時間複雜度為o(nlgn),空間複雜度需要o(n)。
初始資料集排序順序與比較次數無關的是:堆排序、歸併排序、選擇排序
不穩定的排序:快速排序、選擇排序、希爾排序和堆排序
輔助空間為o(1)的排序演算法:插入、選擇、希爾、堆、冒泡、歸併
演算法 常見的排序演算法 簡單排序
常見的一些排序演算法,一些是從書上看的,一些則是參考別人的部落格,從雜亂無章的部落格裡提取實屬不易,多謝理解 直接插入排序演算法的基本思路 把未排序的資料放在乙個已排序好的陣列裡面 演算法名稱 平均時間複雜度 最差時間分析 空間複雜度 穩定度直接插入排序 o n2 o n2 o 1 穩定所有排序方法...
簡單排序演算法
package com.shine.sort 排序演算法 說明 排序演算法分為三種 插入排序 交換排序 選擇排序 1.插入排序 直接插入排序 折半插入排序 希爾排序 2.交換排序 氣泡排序 快速排序 3.選擇排序 直接選擇排序 堆排序 public class mysort 希爾排序 描述 1.將乙...
簡單排序演算法
演算法思想 將初始序列 a 0 a n 1 作為待排序序列,第一趟在待排序序列 a 0 a n 1 中找最小值元素,與該序列中第乙個元素a 0 交換,這樣的子串行 a 0 有序,下一趟排序在待排序子串行 a 1 a n 1 中進行。第i趟排序在待排序子串行 a i 1 a n 1 中,找最小值元素,...