快速排序
思路
快速排序分的代码分为两部分:
1. 一部分为Partition(int a[],int left,int right) 将区间内的数进行划分,即将大于temp的数放在右侧,小于的放在左侧。仅进行一次划分;
int Partition(int a[],int left,int right)
{
int temp=a[left];
while(left<right){
while(left<right&&a[right]>temp) right--;
a[left]=a[right];
while(left<right&&a[left]<temp) left++;
a[right]=a[left];
}
a[left]=temp;
return left;
}
2.另一部分为quickSort(int a[],int left,int right) 运用递归将数组进行划分,划分的分界点为temp,最终递归为两个数字的排序
void quickSort(int a[],int left,int right)
{
if(left<right){
int temp=Partition(a,left,right);
quickSort(a,left,temp-1);
quickSort(a,temp+1,right);
}
}
完整代码
#include<stdio.h>
//将区间内的数以temp=a[temp]为分界点分为两部分
int Partition(int a[],int left,int right)
{
int temp=a[left];
while(left<right){
while(left<right&&a[right]>temp) right--;
a[left]=a[right];
while(left<right&&a[left]<temp) left++;
a[right]=a[left];
}
a[left]=temp;
return left;
}
void quickSort(int a[],int left,int right)
{
if(left<right){
int temp=Partition(a,left,right);
quickSort(a,left,temp-1);
quickSort(a,temp+1,right);
}
}
int main()
{
int a[5]={3,2,5,4,1};
quickSort(a,0,4);
for(int i=0;i<5;i++)
{
printf("%3d",a[i]);
}
printf("\n");
return 0;
}
看归并排序请点击 归并排序