排序:算法
就是使一串數據,按照其中的某個或某些關鍵字大小,遞增或遞減的排序操做。ide
一、插入排序優化
直接插入排序:在一個有序的序列中插入數據,使其序列仍然有序。spa
時間複雜度爲O(N^2),最好狀況爲O(N)。指針
空間複雜度爲O(1)排序
是一種穩定的排序算法。it
希爾排序:先選定一個整數gap,把待排序的數據分爲若干組,並對每一組進行排序。也就是直接插入排序的優化,根據gap大小,先進行了一次預排序,再將gap依次改變直到爲1,其排序就是直接插入排序了。gap必定爲:gap=gap/n+1;加1是爲了gap必定會等於1.class
當gap>1時,都是預排序,當gap=1時,就爲直接插入排序。效率
時間複雜度爲O(N^1.3)變量
是不穩定的排序。
二、選擇排序
思想:每次在待排序數據中選出最小或最大的數據,存放在序列的起始位置。
直接選擇排序:效率很是低,
時間複雜度爲O(N^2);
空間複雜度爲O(1);
排序算法不是穩定的。
堆排序:是利用建堆來排序的。
若是須要降序,則建小堆,若是升序,則建大堆。
時間複雜度爲O(N*logN)
空間複雜度爲O(1);
是不穩定的排序算法。
三、交換排序
冒泡排序:就是將數據一一比較,每次比較完成都會產生一個數,在其本身位置上,須要比較n-1次。
時間複雜度爲O(N^2)。
空間複雜度爲O(1)。
時穩定的排序算法。
快速排序
時間複雜度爲O(N*logN)
空間複雜度爲O(logN)
不穩定的排序算法。
hoare法(左右指針法)
就是將begin和end依次移動,若是升序,則begin這段找大與key,end找小於key的,找到就互換,知道begin==end。
最右邊作key,左邊先走,左邊作key,右邊先走。由於這樣作,必定能夠肯定最後停的位置會和key交換。
挖坑法:
就是找左/右一端爲key,使其爲一個空位,在其右/左找個數插入其坑位,這樣被插入數據的位置就變爲坑位,再在左/右找個數插入,知道begin==end。
先後指針法
定義2個變量prev和cur,cur=begin,prev=begin-1;cur找小,遇到小,則prev前進一個,再互換cur和prev的值。遇到大,則cur前進,prev不變。