算法 c语言 快速排序

来源:互联网 发布:福建天正网络咨询 编辑:程序博客网 时间:2024/06/05 06:10

#include<stdio.h>
#define N 8
void show(int a[]);
extern int quickpass(int a[],int i,int j);
extern void quicksort(int a[],int low,int high);
int main()
{
    int a[N] = {50,36,66,76,36,12,25,95};
    printf("原无序记录:\n");
    show(a);
    printf("排序过程如下:\n");
    quicksort(a,0,N-1);
    return 0;
}

int quickpass(int a[],int i,int j)
{
    int tmp;
    tmp = a[i];//将a[i]的基值保存起来        
    while(i < j)
    {

        //从上界比较
        while(i < j && tmp <= a[j])
            j--;
        //将a[j]交换到左边
        if(i < j)
        {
            a[i] = a[j];
        }
        //从下界比较
        while(i < j && tmp >=a[i])
            i++;
        //将a[i]交换到右边
        if(i < j)
            a[j] = a[i];
    }
    a[i] = tmp;//将基准放到最终位置
    return i;//返回基准的下标
}
void quicksort(int a[],int low,int high)
{
    int mid;
    if(low < high)
    {
        mid = quickpass(a,low,high); //一趟快速排序
        show(a);
        quicksort(a,low,mid-1);//基准左边序列快速排序
        quicksort(a,mid+1,high);
    }
}

void show(int a[])
{
    int i;
    for(i = 0;i < N;i++)
        printf("%d\t",a[i]);
    printf("\n");
}
原创粉丝点击