C语言版快速排序
#include<stdio.h>
void quicksort(int , int);
int a[101],n,t,temp; //定义全局变量,这三个变量需要在子涵数中使用。
int main(void)
{
printf("请输入要排序的数的个数n:");
scanf("%d", &n);
for(int i = 1; i <= n; i++ ){
printf("请输入要排序的第%d个数:",i);
scanf("%d",&a[i]);
}
printf("\n");
quicksort(1,n);
for(int i = 1; i <= n; i++ ){
printf("%d ",a[i]);
}
getchar();getchar(); //用来暂停程序,便于查看程序输出结果,可用system("pause");等代替
return 0;
}
void quicksort(int left, int right){
int i,j;
i = left;
j = right;
if( j < i ){ //如果条件成立,证明已经没有要排序的数;
return;
}
temp = a[left]; //temp中存放着基准数
while( i != j ){
while(a[j] >= temp && i < j){ //注意顺序,首先从右边往左找.
j--;
}
while(a[i] <= temp && i < j){ //在从左边往右边找
i++;
}
if( i < j ){ //如果条件成立(当i和j没有相遇时),则交换两个数在数组中的位置
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i]; // 将基数归位,
a[i] = temp;
quicksort(left, i-1); //继续处理左边的,这里是一个递归过程。
quicksort(i+1, right); // 继续处理右边的,这里是一个递归过程。
}