算法 c語言 快速排序


#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");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章