快速排序的思想:
1:先确定开头下标和最后的下标。
2:然后在取一个值x,来划分界限。
3:如果大于等于x,放在x的右边,如果小于等于x,就放在x的左边。
同时下标开始移动,然后在将不符合条件的两个值进行交换,判断开头的下标是否小于等于最后的下标,如果是则停止。
4:然后进行递归,讲数据以x为中心,分为前部分和后部分。
代码如下:
#include<stdio.h>
#define N 4
int q[N];
void quick_sort(int q[],int start,int end){
int x=q[start];// 找一个了来当中间值
int i=start-1;//从开头
int j=end+1;//从最后
int temp;
//如果开始start就大于end的话,就不用查找了,直接跳出循环。
if(start>=end){
return;
}
while(i<j){//如果i++,j--,一直动,直到i>j,就跳出循环。
do{
//如果q[i]小于的x的话,就i++,直到找到大于x的值。
i++;
}while(q[i]<x);
do{
//如果q[j]小于的x的话,就j--,直到找到小于x的值
j--;
}while(q[j]>x);
if(i<j){
//交换两个数的位置
temp=q[i];q[i]=q[j];q[j]=temp;
}
}
quick_sort(q,start,j);//给前半部分排序
quick_sort(q,j+1,end);//给后半部分排序
}
main(){
int i;
//给数组里面赋值
for(i=0;i<N;i++){
scanf("%d",&q[i]);
}
//调用排序方法
quick_sort(q,0,N-1);
//输出排序后的数组
for(i=0;i<N;i++){
printf(" %d ",q[i]);
}
}