今天终于搞懂了快速排序算法,纪念一下
#include<stdio.h>
void swap(int * num,int i,int j)
{
int temp=num[i];
num[j]=num[i];
num[i]=temp;
}
int qsort(int *num,int left,int right)
{
/*取第一个数作为基准,将第一个数交换位置,直到左边的数比它小,右边的数比它大*/
if(left>=right)
return -1;
int i=left,j=right;
int pos=left,key=num[left];
while(true)
{
while(i < j && num[j] >= key)
j--;
num[i]=num[j]; pos=j;
while(i<j && num[i] <= key)
i++;
num[j]=num[i]; pos=i;
if(i>=j)
break;
}
num[pos]=key;
printf("%d %d\n",i,j);
return pos;
}
void partition(int *num,int start,int stop)
{
/*
num是数组,start是开始下标,stop是结束下标*/
int mid=qsort(num,start,stop);
///printf("%d\n",mid);
if(mid==-1)
return ;
partition(num,start,mid-1);
partition(num,mid+1,stop);
}
int num[10]={15,6,9,6,21,14,57,20,18,19};
int main()
{
partition(num,0,9);
for(int i=0;i<10;i++)
printf("%d ",num[i]);
printf("\n");
}