用C语言编写一个快速排序算法 输入10个数

#include <stdio.h>
#define N 10
void quickSort(int *arr,int l,int r)
{//此处编写代码实现快速排序
}
void printArray(int *a)
{//此处编写代码打印数组
}

void main()
{
int a[N];
//此处编写代码读入数组
//.............................
printf("排序前的数据为:\n");
printArray(a);
//调用快速排序函数,对数组中从0到N的元素进行快速排序
quickSort(a,0,N-1);

printf("从小到大排序后的序列为:\n");
printArray(a);
}

1、“快速排序法”使用的是递归原理,下面一个例子来说明“快速排序法”的原理。首先给出一个数组{53,12,98,63,18,72,80,46, 32,21},先找到第一个数--53,把它作为中间值,也就是说,要把53放在一个位置,使得它左边的值比它小,右边的值比它大。{21,12,32, 46,18,53,80,72,63,98},这样一个数组的排序就变成了两个小数组的排序--53左边的数组和53右边的数组,而这两个数组继续用同样的方式继续下去,一直到顺序完全正确。一般来说,冒泡法是程序员最先接触的排序方法,它的优点是原理简单,编程实现容易,但它的缺点就是速度太慢。
2、快速排序代码:

#include<stdio.h>
void quicksort(int a[],int left,int right)
{
    int i,j,temp;
    i=left;
    j=right;
    temp=a[left];
    if(left>right)
        return;
    while(i!=j)
    {
        while(a[j]>=temp&&j>i)
            j--;
        if(j>i)
            a[i++]=a[j];
        while(a[i]<=temp&&j>i)
            i++;
        if(j>i)
            a[j--]=a[i];
        
    }
    a[i]=temp;
    quicksort(a,left,i-1);
    quicksort(a,i+1,right);
}
void main()
{
    int a[]={53,12,98,63,18,72,80,46,32,21};
    int i;
    quicksort(a,0,9);
    /*排好序的结果*/
    for(i=0;i<10;i++)
        printf("%4d\n",a[i]);
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-23
代码如下:
#include <stdio.h>
#define N 10
void quickSort(int *arr,int l,int r)
{//此处编写代码实现快速排序
int i,j,x,temp;
if(l<r)
{
i=l;
j=r;
x=arr[(l+r)/2]; //以中间元素为轴
while(1)
{
while(i<=r&&arr[i]<x)i++;
while(j>=0&&arr[j]>x)j--;

if(i>=j) //相遇则跳出
break;
else
{
temp=arr[i];arr[i]=arr[j];arr[j]=temp; //交换
}
}
qsort(arr,l,i-1); //对左半部分进行快排
qsort(arr,j+1,r); //对右半部分进行快排
}
}
void printArray(int *a)
{//此处编写代码打印数组
int i=0;
for(;i<N;i++)
printf("%d\t",a[i]);
printf("\n");
}

int main()
{
int a[N];
int i;
for(i=0;i<N;i++)
scanf("%d",a+i);
printf("排序前的数据为:\n");
printArray(a);
//调用快速排序函数,对数组中从0到N的元素进行快速排序
quickSort(a,0,N-1);

printf("从小到大排序后的序列为:\n");
printArray(a);
return 0;
}本回答被提问者和网友采纳
第2个回答  2010-05-23
相似回答