C partition 快速排序演算法實現

2021-10-05 08:53:20 字數 2734 閱讀 7591

演算法思想

快速排序也採用分治思想;

把原始的陣列篩選成較小和較大兩個子陣列,然後遞迴地排序兩個子陣列;

在分成較小和較大的兩個子陣列過程中,如何選定基準值很關鍵。

**實現

partition部分

#include

#include

#include

using

namespace std;

void

swap

(vector<

int>

& nums,

int m,

int n)

;int

randrange

(int low,

int high)

;int

partition

(vector<

int>

& nums,

int low,

int high)

;//快速排序主體

void

quicksort

(vector<

int>

& nums,

int low,

int high)

//使得被選出的基準值,都是當前子陣列中的中間數

inline

intpartition

(vector<

int>

&nums,

int low,

int high)

}swap

(nums, i, j)

;return i;

}//針對陣列,將指定的兩個座標對應的數交換

inline

void

swap

(vector<

int>

&nums,

int m,

int n)

//從指定的範圍,隨機選取乙個整數

inline

intrandrange

(int low,

int high)

//列印陣列

void

printvector

(const vector<

int>

& a)

cout << endl;

}int

main

(int argc,

char

** ar**)

;quicksort

(a,0

, a.

size()

-1);

printvector

(a);

return0;

}

換湯不換藥,下面這份**沒有那麼短小函式:

#include

#include

#include

using

namespace std;

intpartition1

(vector<

int>

& nums,

int low,

int high)

;//快速排序主體

void

quicksort

(vector<

int>

& nums,

int low,

int high)

//整合版的partion

intpartition1

(vector<

int>

& nums,

int low,

int high)

}//結束後,i之前的所有的數都不大於基準值,i之後所有的數都大於基準值;退出的時候j=high

std::

swap

(nums[i]

, nums[j]);

//把j位置的數(基準值)換到i位置上來

return i;

}//列印陣列

void

printvector

(const vector<

int>

& a)

cout << endl;

}int

main

(int argc,

char

** ar**)

;quicksort

(a,0

, a.

size()

-1);

printvector

(a);

return0;

}

從兩端逼近:

/*靠譜的方法*/

void

quicksort1

(vector<

int>

& nums,

int left,

int right)

while

(nums[i]

<= target && i < j)

if(i < j)

} nums[left]

= nums[i]

; nums[i]

= target;

quicksort1

(nums, left, i -1)

;quicksort1

(nums, i +

1, right)

;return

;}

快速排序算方法

快速排序演算法的原理 在待排序的n個記錄中任取乙個記錄 通常取第乙個記錄 為分割槽標準,把所有小於該排序碼的記錄移到左邊,把所有大於該排序碼的記錄移到右邊,中間放所選記錄,稱之為一趟排序 然後,對前後兩個子串行分別重複上述過程。繼續下去,知道所有記錄都排好序。演算法 標頭檔案定義結構體 1 ifnd...

python快速排序的原理 理解快速排序演算法

快速排序的時間複雜度為o nlogn 空間複雜度為o n 根據 張小牛 的文章快速排序 quick sort 詳解,證明最優的排序演算法,其時間複雜度可為o nlogn 對應的空間複雜度可為o n 快速排序可實現理論最優效率,這可能是快速排序比較重要的原因吧。我們基於python學習寫一下快速排序吧...

排序算發 計數排序

前面已經記錄過插入排序,歸併排序,快速排序,堆排序等四種排序。它們都有個共性,就是通過多次比較來得出前後順序,這種叫做比較排序,當然除此之外也有非比較排序。今天記錄的計數排序就是一種非比較排序。算發思想 有一串資料,如果我們知道每乙個元素公升序在陣列中的第幾個,那麼我們就知道了公升序的結果。而對於如...