快速排序:
1、 先在整个待排序的序列中选择一个基准数据,一般选择第一个数据。
2、 i,j; i:从前往后找 j:从后往前找 可以写两个循环,但必须i<j
a,从后向前找第一个比基准小的数据,找到后将其放在i的位置上。
b,从前向后找第一个比基准大的数据,找到后将其放在j的位置上
3、 将基准存在i的位置上(此时将数据分为两部分,基准左右两部分,然后递归这一次的排序)
#include <stdio.h>
int FastSort(int *arr,int i,int j) //第一趟的排序
{
int tmp=arr[i];//将基准存在tmp中;
while(i<j)
{
while(i<j&&arr[j]<=tmp) j--;
if(i<j) arr[i++]=arr[j];
while(i<j&&arr[i]>=tmp) i++;
if(i<j) arr[j--]=arr[i];
}
return i;
}
void Fast(int *arr,int i,int j) //递归调用
{
int pos;
if(i<j)
{
pos=FastSort(arr,i,j);
Fast(arr,0,pos-1);
Fast(arr,pos+1,j);
}
}
void Fa(int *arr,int len)
{
if(arr==NULL||len<0) return ;
Fast(arr,0,len-1);
}
int main()
{
int arr[]={4,3,6,7,2,9};
int len =sizeof(arr)/sizeof(arr[0]);
Fa(arr,len);
for(int i=0;i<len;i++ )
{
printf(“%d ”,arr[i]);
}
return 0;
}
快速排序
最新推荐文章于 2021-11-19 16:57:43 发布