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

    技术2022-07-10  184

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

    算法思想:    

    给定一个数组,每次选取数组第一个位置作为枢轴元素,然后通过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);      }

    代码实现结果:

    Processed: 0.030, SQL: 9