快速排序C实现

在数据结构中的快速排序实现,未将原数组排序为递增或递减的序列,该C语言通过指针将原数组进行了改变。

low和high的数值交换:

void Swap(int *a,int *b)
{
    int p=*b;
    *b=*a;
    *a=p;
}

Partition(分区函数):通过内层while可看出快速排序不是稳定排序算法

int Partition(int *arr,int low,int high)
{
    int *pivot=&arr[low];
    while(low<high)
    {
        while(low<high&&arr[high]>*pivot)
            high--;
        while(low<high&&arr[low]<*pivot)
            low++;
        Swap(&arr[low],&arr[high]);    
    }
    Swap(pivot,&arr[low]);    
    return low;
}

QuickSort函数:

void QuickSort(int arr[],int low,int high)
{
    if(low<high)
    {
        int pivotpos=Partition(arr,low,high);
        
        QuickSort(arr,low,pivotpos-1);
        QuickSort(arr,pivotpos+1,high);
    }
}

 

完整代码:

#include <stdio.h>

void Swap(int *a,int *b)
{
    int p=*b;
    *b=*a;
    *a=p;
}

int Partition(int *arr,int low,int high)
{
    int *pivot=&arr[low];
    while(low<high)
    {
        while(low<high&&arr[high]>*pivot)
            high--;
        while(low<high&&arr[low]<*pivot)
            low++;
        Swap(&arr[low],&arr[high]);    
    }
    Swap(pivot,&arr[low]);    
    return low;
}

void QuickSort(int arr[],int low,int high)
{
    if(low<high)
    {
        int pivotpos=Partition(arr,low,high);
        
        QuickSort(arr,low,pivotpos-1);
        QuickSort(arr,pivotpos+1,high);
    }
}

int main()
{
    int arr[10]={3,5,4,7,6,8,9,1,0,2};
    int i;
    for(i=0;i<10;i++)
        printf("%d",arr[i]);
    printf("\n");
    QuickSort(arr,0,9);
    for(i=0;i<10;i++)
        printf("%d",arr[i]);
    return 0;
}

 

posted on 2023-10-26 19:12  四马路弗洛伊德  阅读(8)  评论(0)    收藏  举报

导航