1. 程式人生 > 其它 >C++:快速排序法的程式碼實現

C++:快速排序法的程式碼實現

技術標籤:C++演算法資料結構快速排序c++

快速排序法

**快速排序法(quick sort)**的基本思想是:通過一趟排序將要排序的記錄分割成獨立的兩部分,其中一部分的所有記錄關鍵碼比另外一部分的記錄關鍵碼都要小,然後再按此方法對這兩部分資料分別進行遞迴快速排序,從而使序列成為有序序列。

設有A[1]一A[n]的n個數據,選取第一個資料作為關鍵資料,然後將所有比它小的資料都放到它前面,所有比它大的資料都放到它後面,稱為一趟快速排序。其演算法是:
①設定兩個變數i、j,排序開始的時候i=左邊界,j=右邊界,令關鍵資料s=A[i]。
②從 i 開始向前搜尋,直到找到小於s的數。
③從 j

開始向前搜尋,直到找到小於s的數。
④如果i≤j,則交換A [ i ]和A [ j ]。
⑤重複第②~④步,直到i≥j;將關鍵資料與A[j]交換。
在這裡插入圖片描述

#include <iostream>
#include <stdlib.h>
#include<ctime>
using namespace std;
#define N 10


void Quicksort(int A[],int n,int left,int right){//快速排序,n為陣列大小,left為左邊界,right為右邊界
	int i,j,t;
    if(left < right)
{ //一趟快速排序 i = left; j = right+1; while(1){ while(++i<n && A[++i]<A[left]);//i向後搜尋<升序>降序 while(j-1>-1 && A[--j]>A[left]);//J向前搜尋,>升序,<降序 if(i>=j)break; t=A[i],A[i]=A[j],A[j]=t; //交換 } t=A[left],A[left]=
A[j],A[j]=t; //交換 Quicksort(A,n,left,j-1);//左半部分遞迴 Quicksort(A,n,j+1,right);//右半部份遞迴 } } int main(){ int A[N],i; srand((unsigned int )time(0)); cout<<"隨機生成的陣列為:"<<endl;; for(i=0;i<N;i++){//隨機生成一個10個的100以內的數字作為陣列A A[i]=rand()% 100; cout<<A[i]<<" "; } cout<<endl; cout<<"快速排序結果為:"<<endl; Quicksort(A,N,0,N-1);//快速排序函式 for(i=0;i<N;i++) cout<<A[i]<<" "; //輸出 return 0; }

結果如圖:
在這裡插入圖片描述