快速排序(记录学习进度)
1.快排:对一堆数字选取一个基准,比该数字小的全部放在左边,比该数字大的全部放在右边。最后可以得出基准的位置。然后在对两边进行相同的操作。
#include <stdio.h>
void quilkSort(int *,int ,int );
int main ()
{
int N,i;
scanf("%d",&N);
int nums[N];
for (i=0;i<N;i++)
scanf("%d",&nums[i]);
quilkSort(nums,0,N-1);
for (i=0;i<N;i++)
printf("%d\t",nums[i]);
}
void quilkSort(int *nums,int left,int right)
{
int pivot=nums[right]; //选取一个基准
int first=left,last=right;
if (first>=last) //为下面的递归找一个出口
return ;
while (first<last)
{
while (first<last && nums[first]<=pivot)
first++;
nums[last]=nums[first];
while (first<last && nums[last]>=pivot)
last--;
nums[first]=nums[last];
}
nums[first]=pivot;
quilkSort(nums,left,first-1); //这个地方first-1是因为,first的下标是基准的位置,所以对左边排序的时候需要-1
quilkSort(nums,left+1,right); //这个同上
}