很多朋友對于快速排序第一趟排序過程和寫出快速排序第一趟和第二趟不太懂,今天就由小編來為大家分享,希望可以幫助到大家,下面一起來看看吧!
常見的幾種排序算法
排序算法一般分為以下幾種:
(1)非線性時間比較類排序:交換類排序(快速排序和冒泡排序)、插入類排序(簡單插入排序和希爾排序)、選擇類排序(簡單選擇排序和堆排序)、歸并排序(二路歸并排序和多路歸并排序);
(2)線性時間非比較類排序:計數排序、基數排序和桶排序。
快速排序屬于什么排序
快速排序(Quicksort)是對冒泡排序的一種改進。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
C語言程序,排序----快速排序法
快速排序(Quicksort)是對冒泡排序的一種改進。由C.A.R.Hoare在1962年提出。
它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小。
然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
擴展:C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用于底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。盡管C語言提供了許多低級處理的功能,但仍然保持著跨平臺的特性,以一個標準規格寫出的C語言程序可在包括類似嵌入式處理器以及超級計算機等作業平臺的許多計算機平臺上進行編譯。
快速排序算法實例
對關鍵碼序列(66,13,51,76,81,26,57,69,23)進行快速排序。
求第一趟劃分后的結果。關鍵碼序列遞增。以第一個元素為劃分基準。將兩個指針i,j分別指向表的起始和最后的位置。反復操作以下兩步:
1、j逐漸減小,并逐次比較j指向的元素和目標元素的大小,若p(j)<T則交換位置。
2、i逐漸增大,并逐次比較i指向的元素和目標元素的大小,若p(i)>T則交換位置。
直到i,j指向同一個值,循環結束。
快速排序是對冒泡排序的一種改進,基本思路如下:先從數列中取出一個數作為基準數將數組中比這個數大的數全放到它的右邊,小于或等于它的數全放到它的左邊再對左右區間重復第二步,直到各區間只有一個數。
快速排序算法是對冒泡排序的一種改進。快排基本思想是:通過一趟排序將要排序的數據以基準數據分割成獨立的兩部分。
其中一部分的所有數據都比基準數據小,另外一部分的所有數據都比基準數據大,然后再通過遞歸對這兩部分數據分別進行快速排序,實現整個數據變成有序序列。
什么是快速排序
1.如何理解快速排序
快速排序是對冒泡排序的一種改進,它是不穩定的。由C.A.R.Hoare在1962年提出的一種劃分交換排序,采用的是分治策略(一般與遞歸結合使用),以減少排序過程中的比較次數,它的最好情況O(nlogn),最壞情況O(n^2),平均時間復雜度為O(nlogn)。分而治之不是一種解決問題的算法,而是一種希望問題分解,將復雜的問題劃分為多個簡單問題來解決的思想。
?
快速排序的基本思想:
?
選擇一個基準數,通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小。然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以達到全部數據變成有序。
?
快速排序的步驟:
?
(1)從數列中挑出一個"基準值"(pivot)。
(2)重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數可以到任一邊)。在這個分區退出之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作。
(3)遞歸地(recursive)把小于基準值元素的子數列和大于基準值元素的子數列排序。
?
注意:基準元素/左游標/右游標都是針對單趟排序而言的,也就是說在整個排序過程的多趟排序中,各趟排序取得的基準元素/左游標/右游標一般都是不同的。對于基準元素的選取,原則上是任意的,但是一般我們選取數組中第一個元素為基準元素(假設數組隨機分布)。
?
2.快速排序的過程描述
(1)選擇最右邊的元素為基準數7;
(2)將小于7的放在左邊,大于7的放在右邊,然后將基準數放到中間;
(3)然后再重復操作從左邊的數組選擇一個基準點2;
(4)3比2大則放到基準樹的右邊;
(5)右邊的數組也是一樣選擇12作為基準數,15比12大所以放到了12的右邊;
(6)最后出來的結果就是從左到右2,3,7,12,15了。
各種排序算法的復雜度
快速排序法的時間復雜度是nlogn(n×log以2為底n的對數)拓展:快速排序(Quicksort)是對冒泡排序的一種改進。快速排序由C.A.R.Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。附各種排序法的時間復雜度如下:
好了,本文到此結束,如果可以幫助到大家,還望關注本站哦!