1. 程式人生 > >演算法中分治策略實現快速排序

演算法中分治策略實現快速排序

快速排序演算法是基於分治策略的一個排序演算法,其基本思想是,對於輸入的子陣列,按以下三個步驟求解:

1 分解:選擇一個基準元素,將整個陣列分為大於基準元素,等於基準元素,小於基準元素的三組。基準元素在在劃分的過程中確定

2  遞迴求解:通過遞迴呼叫快速排序演算法分別對大於和小於基準元素的陣列進行排序

3  合併:將遞迴的子陣列進行合併最後成為排好序的陣列

下面是程式的程式碼:

#include<iostream>
using namespace std;
int Partition(int a[],int p ,int r)
{

int i = p,j=r+1,sub;

int x = a[p];

//將<x的元素交換到左邊區域

//將>x的元素交換到右邊區域

while(true)

{

while(a[++i]<x&&j<r);

while(a[--j]>x);

if(i>=j) break;

sub = a[i];

a[i] = a[j];

a[j] =sub;

}

a[p] = a[j];

a[j] =x;

return j;

}

void QuickSort(int a[],int p,int r)

{

if(p<r)

{

int q = Partition(a,p,r);

QuickSort(a,p,q-1);//對左半段排序

QuickSort(a,q+1,r);//對右半段排序

}

}     

int main()

{

int aa[4]={2,3,1,5};

QuickSort(aa,0,3);

for(int i= 0; i<4;i++)

cout<<aa[i]<<" ";

}

相關推薦

演算法分治策略實現快速排序

快速排序演算法是基於分治策略的一個排序演算法,其基本思想是,對於輸入的子陣列,按以下三個步驟求解: 1 分解:選擇一個基準元素,將整個陣列分為大於基準元素,等於基準元素,小於基準元素的三組。基準元素在

(排序演算法)linux c語言實現快速排序(氣泡排序的改進版)

 快速排序演算法是對氣泡排序演算法的一種改進,氣泡排序是對單個元素的升降,快速排序是對所有元素的升降,不過這個升降是取了某一個標準的前提下,在本文程式碼中,就以a[i],其實就是以最左邊的元素為參考,比較交換之後,將這個參考元素放到分界的地方,即i的位置。 程式碼如下,裡面有比較詳細的

(排序演算法)linux c語言實現快速排序

/*************************************************** ##filename : arrinsert.c ##author : GYZ ##

演算法分析——分治思想之快速排序

優化一個演算法的最根本的原理就是減少演算法的基本操作。 分治法的設計思想是,將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。 於是,在快速排序中,我們通過分割陣列的思路來將大問題分割成小規模的問題,與二分搜尋法類似的是,在二分法 中,我們需

演算法設計:兩種快速排序程式碼實現

快速排序是一種高效且使用廣泛的排序演算法,在很多語言的標準庫中自帶的排序都是快速排序,所以我們也有必要了解快排的原理以及其實現方法。 快排的大致思想 快速排序實現的重點在於陣列的拆分,通常我們將陣列的第一個元素定義為比較元素,然後將陣列中小於比較元素的數放到左邊,將大於比較元素的放到右邊, 這樣我們就將

Python實現快速排序演算法

快速排序也是使用了分治思想的排序方法,但與歸併排序不一樣的是“分”的時候的依據。歸併排序“分”的依據是對半分,不管大小,而快速排序則是選定陣列中的一個值,以這個值為依據,將陣列分為三個部分:小於這個值的部分,大於等於這個值的部分,這個值。這樣就以選定的點將陣列分

常用排序演算法java程式碼實現---快速排序,氣泡排序,選擇排序

快速排序 public class QuickSort { public void qSort(int[] arr,int left,int right) { if(left>right) { return ; } int i = le

[排序演算法]C++實現快速排序

基本思想   快速排序(Quick Sort)是對氣泡排序的一種改進。   它的基本思想是,通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩

ios使用object-c實現快速排序演算法

在iOS開發中我們有許多時候用到排序演算法,而快速排序是比較常用的演算法程式碼才用遞迴的方法,內容如下:-(void)quickSort:(NSMutableArray *)array withLeftIndex:(NSInteger)leftIndex AndRightIn

演算法 -- Java實現快速排序(圖解 + 程式碼實現)

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

Java語言描述:遞迴與分治策略之合併排序快速排序

合併排序: package DivideAndConquer; public class MergeSort { //一定要多傳入一個多餘的temp陣列用於存放排序的中間結果 public static<AnyType extends Comparable&l

用Python實現快速排序(Quicksort)演算法

1.快速排序(Quicksort)演算法介紹 快速排序(Quicksort)是對氣泡排序的一種改進,但是不是穩定的排序演算法 2.演算法思想 1)設定兩個變數i、j,排序開始的時候:i=0,j=N-1; 2)以第一個陣列元素作為關鍵資料,儲存在key中,即key=

三種快速排序演算法實現(遞迴演算法、非遞迴演算法、三路劃分快速排序

快速排序的三個步驟: 1、分解:將陣列A[l...r]劃分成兩個(可能空)子陣列A[l...p-1]和A[p+1...r],使得A[l...p-1]中的每個元素都小於等於A(p),而且,小於等於A[p

演算法java——簡單實現快速排序

快速排序 快速排序是對氣泡排序的改進,它使用分治法的思想,每次迴圈根據指定的基準數,將其他元素分別放置其左右(升序排序,大的放右小的放左),第二次迴圈,以基準數為中心,分為左右兩部分,每部分再通過新的基準數排序…(下邊來個小例子解釋)。 基準數:一般指定第

java實現快速排序演算法

package cn.com.wanghy; /** * 快速排序:是對起泡排序的一種改進,它的基本思想是:通過一趟排序將待排序記錄分割成獨立的兩部分, * 其彙總一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分繼續進行排序,已達到 * 整個序列有序

馬蜂窩推薦排序演算法模型是如何實現快速迭代的

(馬蜂窩技術原創文章,微信ID:mfwtech)   Part.1馬蜂窩推薦系統架構 馬蜂窩推薦系統主要由召回(Match)、排序(Rank)、重排序(Rerank)幾個部分組成,整體架構圖如下: 在召回階段,系統會從海量的內容庫篩選出符合使用者偏好的候選集(百級、千級);排序階段在此基礎上,基

排序演算法-Java實現快速排序演算法

​​   開篇介紹 大家好,公眾號【Java極客思維】近期會整理一些Java高頻面試題分享給小夥伴,也希望看到的小夥伴在找工作過程中能夠用得到!本章節主要針對Java快速排序演算法的實現進行分享。   首先,來看一下,快速排序的實現的動態圖: ​   快速排序介紹: 快速排序,根

js實現快速排序的方法

大小 我們 mage 左右 div () quicksort www for 因為面試面到了這個問題,所以寫一下,加深印象,有兩種方法 第一種是通過兩個for循環,每一次對比相鄰兩個數據的大小,小的排在前面,如果前面的數據比後面的大就交換這兩個數的位置,這個方法就是比較次數

使用JS實現快速排序

中間 math 遍歷 ice 大致 spl arr [0 遞歸 大致分三步: 1、找基準(一般是以中間項為基準) 2、遍歷數組,小於基準的放在left,大於基準的放在right 3、遞歸 function quickSort(arr){ /

python-實現快速排序

code urn print lis 退出 快速 turn utf-8 col # encoding=utf-8 def quick_sort(alist, start, end): """快速排序""" if start >= end: