快速排序C++實現


#include<iostream>

using namespace std;
class quicksort{

public:

int quicks(int *a,int low,int high)
{
int q=a[low];//q
int i=low;
int j=high;

while(i<j)
{
while(q<=a[j]&&i<j)
{
j--;
}
if(i<j)

{
swap(a[i++],a[j]);
}
while(a[i]<=q&&i<j)
{
i++;
}
if(i<j)
{
swap(a[i],a[j--]);}

}
return j;

}
void quicksorts(int *a,int low,int high)
{
if(low<high)
{
int pivote=quicks(a,low,high);
quicksorts(a,low,pivote-1);
quicksorts(a,pivote+1,high);
}

}
};
int main()
{

int arr[]={2,14,32,182,34,605,99,9,7,54,22,6,7};
quicksort qs;
int len=sizeof(arr)/sizeof(int);
qs.quicksorts(arr,0,len-1);
for(int a=0;a<len;a++)
{
cout<<arr[a]<<"_ ";
}
return 0;
}

注意紅色部分為易錯部分,藍色部分的++不寫也照樣對,只不過每輪多比較一次已比過的數。還有q哨兵數一般選哪個都行,指的是一個數組里的數而不是數組下標,這里的返回值i=j,返回的是p哨兵位置(pivote)。當然你也可以讓p=下標,不過這樣每次交換后也要改變p.而在上式,p每次都是固定的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM