为计算机专业大学生提供的c实现的快速排序算法

学习数据结构以及平时老师留的作业中有很多算法题,故分享给计算机专业在校朋友们代码,希望能帮助你理解然后完成作业考试。

算法思想:    

给定一个数组,每次选取数组第一个位置作为枢轴元素,然后通过low和high两个变量,一个指向数组第一个位置,一个指向数组最后一个位置。

主要看我的代码,划分函数这个方法里面,每次我把array[low]赋值给provt,也就是枢轴元素,然后在low小于high的情况下执行内部两个while循环,因为已经把low位置的值充当枢轴元素了,所以其实这个时候其实array[low]里的值就相当于空了,因此我们的while循环是从后向前,先执行high--,(注意这个细节)找到比枢轴元素provit小的元素,就将其放到array[low]当中,这个时候array[high]的值也就相当于空了,然后执行第二个while循环,也就是比枢轴元素小的话就执行low++,找到比枢轴元素大的值就放到array[high]里,最后low和high相等跳出循环,确定枢轴元素的最终位置,以此类推,应该就可以看懂这个代码了,由于笔者水平有限,描述可能有不清晰的地方,大家可以评论留言互动。

#include <stdio.h> 
#define SiZE 9

//输出函数 
void DisPlay(int array[],int maxsise){
    for(int i=0;i<maxsise;i++){
        printf("%d ",array[i]);
    }
    printf("\n");
    return; 
}

//划分函数
int Partition(int array[],int low,int high){
    int prvot = array[low];
    while(low<high){
        //比枢轴元素大的话就不操作,high--, 
        while(low<high&&array[high]>=prvot)
            high--;
            array[low]=array[high];//比枢轴元素小的移动到左端
        //比枢轴元素小的话就不操作,low++, 
        while(low<high&&array[low]<=prvot)
            low++;
            array[high]=array[low];//比枢轴元素大的移动到右端 
    }
    array[low]=prvot;//枢轴元素的最终位置
    
    printf("这次充当枢轴元素的值和最终位置:%d %d\n",array[low],low+1);
    DisPlay(array,SiZE);
    return low; 

//快速排序
void QuickSort(int array[],int low,int high){
    if(low<high)
    {
        int pivotpos = Partition(array,low,high);//确定第一次划分枢轴元素的最终位置 
        QuickSort(array,low,pivotpos-1);//划分左子表 
        QuickSort(array,pivotpos+1,high);//划分右子表 
    }
}

int main(){
    int array[SiZE] = {66,13,51,76,81,26,57,69,23};  
    printf("排序前:\n");
    DisPlay(array,SiZE);
    
    QuickSort(array,0,SiZE-1); 
    printf("排序后:\n");
    DisPlay(array,SiZE);
    
}

代码实现结果:

为计算机专业大学生提供的c实现的快速排序算法