1. 程式人生 > >快速排序及時間複雜度分析

快速排序及時間複雜度分析

它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

package com;

public class maopao {

    public int kuaipai(int l,int r,int a[])
    {
        //將區間最左邊的作為基準數
        int key=a[l];
        while(l<r)
        {
            while(l<r && key <= a[r])
                r--;
            a[l]=a[r];
            while
(l<r && key >= a[l]) l++; a[r]=a[l]; } a[l]=key; return l; } public static void main(String[] args) { int a[]={4,2,9,3,5,7,9,0}; maopao m=new maopao(); //返回基準數所在的位置 int mid=m.kuaipai(0,a.length-1,a); m.kuaipai(0
, mid-1, a); m.kuaipai(mid+1, a.length-1, a); for(int i = 0;i <= a.length-1; i++) System.out.print(a[i]); } }
  • 1)設定兩個變數i、j,排序開始的時候:i=0,j=N-1;
  • 2)以第一個陣列元素作為關鍵資料,賦值給key,即key=A[0];
  • 3)從j開始向前搜尋,即由後開始向前搜尋(j–),找到第一個小於key的值A[j],將A[j]和A[i]互換;
  • 4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第一個大於key的A[i],將A[i]和A[j]互換;
  • 5)重複第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中A[j]不小於key,4中A[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)。

快速排序最優時間複雜度:O(nlog2n)

最快的時間複雜度是 :O(nlog2n)

最差的時間複雜度:O(n^2)

相關推薦

快速排序時間複雜分析

它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料

快速排序演算法時間複雜分析(原地in-place分割槽版本)

快速排序演算法一般來說是採用遞迴來實現,其最關鍵的函式是partition分割函式,其功能是將陣列劃分為兩部分,一部分小於選定的pivot,另一部分大於選定的pivot。我們將重點放在該函式上面。 partition函式總體思路是自從一邊查詢,找到小於pivot的元素,則將

排序的JAVA實現時間複雜分析

堆排序是一個比較常用的排序方式,下面是其JAVA的實現: 1. 建堆 // 對輸入的陣列進行建堆的操作 private static void buildMaxHeap(int[] array, int length) { // 遍歷所有

排序演算法時間複雜分析

堆其實通常是通過一維陣列來實現的,在陣列起始下標為0的情況下,父節點i的左右子節點分別為2*i+1和2*i+2,子節點i的父節點為(i-1)/2。對堆的操作主要有建堆、調整堆、堆排序、插入和刪除堆中元素。其中調整堆是核心。下面將重點介紹兩種調整堆的方法。 向下調整堆(shi

快速排序和歸併排序時間複雜分析——通俗易懂

# 一、前言   今天面試的時候,被問到歸併排序的時間複雜度,這個大家都知道是``O(nlogn)``,但是面試官又繼續問,怎麼推匯出來的。這我就有點懵了,因為之前確實沒有去真正理解這個時間複雜度是如何得出的,於是就隨便答了一波(理解了之後,發現面試的時候答錯了......)。 &em

資料結構與演算法--蠻力法之氣泡排序時間複雜分析(java)

蠻力法         蠻力法又稱窮舉法和列舉法,是一種簡單直接地解決問題的方法,常常直接基於問題的描述,所以蠻力法也是最容易應用的方法。但是蠻力法所設計的演算法時間特性往往是比較低的,典型的指數時間演算法一般都是通過蠻力

KMP演算法介紹時間複雜分析

概念:字串中 一個字元前面的字串 的字首與字尾的最長匹配長度(短的那個字串) 注意:字首與字尾不可以是整個子字串 例如:a b c a b c d , d位置的最長匹配長度為3,abc 與 abc 匹配 Next陣列:長度與字串長度一致,每個位置儲存對應字元的最長匹配長

關於希爾排序時間複雜分析

     希爾排序又叫做“縮小增量排序”,它也是一種屬於插入排序類的方法,但是在時間複雜度上又有了改進。它的基本思想是,先將整個待排序記錄分割為若干個子序列分別插入排序,待整個序列中的記錄基本有序是,,再對全體記錄進行一次插入排序。 如下是一組增量序列分別為 3 2 1 的

二分查詢法的迴圈與遞迴實現時間複雜分析

設陣列為整數陣列,從小到大排序。二分法強調一定是要先排過序的。 迴圈實現二分法程式碼: #include <iostream> using namespace std; int binary_search(int *array,int low ,int hi

「改進的快速排序時間複雜接近O(n)

1.快速排序知識點回顧: 快速排序採用了一種分治的策略,通常稱其為分治法(Divide-and-Conquer)。 平均時間複雜度為:O(nlogn)         最好時間複雜度為:O(nlogn), 每次找的基準數最佳,為每個區間的中值。         最壞時間複

快速排序 及其時間複雜和空間複雜

 快速排序是排序演算法中效率相對較高的,但使用的人卻是比較少,大家一般信手拈來的排序演算法就是氣泡排序。因為氣泡排序主觀,容易理解,而快速排序使用到了遞迴,大家可能就有點不知所措了。 演算法分析         快速排序由C. A. R. Hoare在1962年提出。

快速排序時間複雜和空間複雜

最近沒有寫快速排序演算法,就轉了一下這個程式碼 快速排序演算法在陣列中選擇一個稱為主元(pivot)的元素,將陣列分為兩部分,使得 第一部分中的所有元素都小於或等於主元,而第二部分的所有元素都大於主元。對第一部分遞迴地應用快速排序演算法,然後對第二部分遞迴地應

排序演算法之 快速排序 及其時間複雜和空間複雜

原文:http://blog.csdn.net/yuzhihui_no1/article/details/44198701 總結: 最好的情況是樞紐元選取得當,每次都能均勻的劃分序列。 時間複雜度O(nlogn)最壞情況是樞紐元為最大或者最小數字,那麼所有數都劃分到一個序

快速排序時間複雜nlogn是如何推導的??

本文以快速排序為例,推導了快排的時間複雜度nlogn是如何得來的,其它演算法與其類似。 對資料Data = { x1, x2... xn }: T(n)是QuickSort(n)消耗的時間; P(n)是Partition(n)消耗的時間; (注:Partition專指把n個

快速排序實現以及時間複雜分析

平均時間複雜度分析: T(1) = 1; T(n) = 2*T(n/2) + a*n;(a為常數,每次合併時,複雜度為O(n)) = 2*(2*T(n/4)+a*n/2) + a*n = 4*T(n/4) + 2*a*n = 4*(2*T(n/8)+a*n/4) + 2*a*n = 8*T(n/8) + 3

常見排序演算法的基本原理、程式碼實現和時間複雜分析

  排序演算法無論是在實際應用還是在工作面試中,都扮演著十分重要的角色。最近剛好在學習演算法導論,所以在這裡對常見的一些排序演算法的基本原理、程式碼實現和時間複雜度分析做一些總結 ,也算是對自己知識的鞏固。 說明: 1.本文所有的結果均按照非降序排列; 2.本文所有的程式均用c++實現,

常見排序演算法時間複雜穩定性

排序演算法 平均時間複雜度 最壞時間複雜度 穩定性 選擇排序 O(N²) O(N²) 不穩定 氣泡排序 O(N²

排序演算法——希爾排序的圖解、程式碼實現以及時間複雜分析

希爾排序(Shellsort) 希爾排序是衝破二次時間屏障的第一批演算法之一。 希爾排序通過比較相距一定間隔的元素來工作;各躺比較所用的距離隨著演算法的進行而減小,直到只比較相鄰元素的最後一趟排序為止。由於這個原因,希爾排序有時也叫做縮減增量排序。 希爾排

常用排序演算法穩定性、時間複雜分析

1、  選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,        氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 2、研究排序演算法的穩定性有何意義?   首先,排序演算法的穩定性大家應該都知道,通俗地講就是能保證排序前兩個相等的資

淺談直接插入排序演算法思想以及時間複雜分析

研究意義 直接插入排序是最基本的一種排序演算法,其思想簡單,容易掌握,對後期的學習也有一定的幫助。 必備知識(之後不再敘述) 排序:將一組雜亂無章的資料排列成一個按關鍵字有序的序列。 穩定性:關鍵值相