#include <iostream>
using namespace std;
void swap(int a[],int x,int y){
int t=a[x];
a[x]=a[y];
a[y]=t;
}//交换值的函数
int partion(int a[],int l,int r){
int point=a[l];//作为基准点
int i=l+1,j=r;
while(1){
while(a[i]<point) i++;
while(a[j]>point) j--;
if(i>=j) break;
swap(a,i,j);
}
//传入的两个int型值为数组上下限,理解a[7]的上下限为a[0],a[6]
//以下提到的指针意为数组下标
//左指针指向的值小于基准点,左指针右移,否则停下
//右指针指向的值大于基准点,右指针左移,否则停下
//左右两边的指针都停下时,交换两指针代表的值
//当左指针在右指针右边或两指针指向同一值时,得到左右两个分区
//一个分区的所有元素均小于基准点,另一个则均大于基准点
swap(a,j,l);
return j;
//改变基准点的下标,使其处于数组的中间位置
}
void qsort(int a[],int l,int r){
if(l<r) {
int point_2=partion(a,l,r);
qsort(a,l,point_2-1);
qsort(a,point_2+1,r);
//两个递归使每次都有一个顺序在中间的数被找出
}
}
int main()
{
int a[8]={4,5,6,7,1,2,3,8};
qsort(a,0,7);
cout<<a[0]<<a[1]<<a[2]<<a[3]<<a[4]<<a[5]<<a[6]<<a[7];
return 0;
}
快速排序超好理解的代码
最新推荐文章于 2024-07-11 21:13:07 发布