前面說的氣泡排序是一種交換排序。交換排序還有一種演算法,就是快速排序演算法。
快速排序的核心思想是分而治之。意思就是選出乙個基準(可以是第乙個元素,也可以是最後乙個。為了方便我們選取第乙個),將小於這個基準的全部元素都放在這個基準的左邊,大於這個基準的全部元素都放在基準的右邊。然後分別對左右兩個陣列在進行同樣的操作。這裡我們就可以用到遞迴。也就是說我們每次進行上述操作後,都可以得到乙個相對有序的陣列。通過不斷縮小範圍,就會得到乙個個小的有序陣列。然後這個些陣列組合起來就可以得到乙個完整的有序陣列。
直接擼**(**實現多種多樣)
//分治的思想,以陣列首個元素為基準元素,小於基準的放到左邊,大於基準的放在右邊,然後將基準數歸位
void quicksort(int a,int start, int end)
}//最終將基準數歸位
a[start] = a[i];
a[i] = temp;
quicksort(a,start, i - 1);//繼續處理左邊的,這裡是乙個遞迴的過程
quicksort(a,i + 1, end);//繼續處理右邊的 ,這裡是乙個遞迴的過程
return;
}
複雜度分析
時間複雜度並不好分析,因為快速排序的時間複雜度和選取的元素有關。當然也和陣列本身元素的次序有關。平均來說,時間複雜度是o(nlogn)。
空間複雜度:演算法本身只是用到了乙個臨時變數,可以看做不需要額為的空間。但是用到了遞迴,所以有棧的開銷。空間複雜度為o(nlogn)。
適用場景分析:
可以看出,快速排序的時間複雜度是比較低的。所以即使資料量較大,快速排序也能hold住。但是要注意,如果本身陣列已經是基本有序的,而且是倒序的,快速排序就退化成氣泡排序了,時間複雜度就變成o(n^2)了。所以當適合資料量大,待排序陣列亂序程度高的時候,用快速排序是比較合適的。
排序演算法總結(快速排序)
終於不用改 了,希望文章大修順利!穩定的演算法 不穩定的演算法 內部排序 排序過程不涉及內 外存交換 外部排序 排序過程有內 外存交換 in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基...
排序演算法總結 快速排序
快速排序的一般步驟如下 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。來自於 啊哈!演算法 這裡需要解釋一下為什麼每次交換的時候都需要右邊的哨兵先走 最主要是相遇點的問題,演算法的...
內排序演算法總結 快速排序
快速排序 快速排序是一種在含n個數的輸入陣列上最壞情況執行時間為o n2 的演算法,平均效能的期望執行時間為o nlgn 且o nlgn 記號中隱含的常數因子很小。另外,它還能夠進行原地置換排序。快速排序是基於分治模式上的,分治過程三個步驟 1.分解 把陣列a p.r 分成兩個非空子陣列a p.q ...