> 文档中心 > 快速排序算法

快速排序算法

目录:

    • 完整程序:
    • 测试结果:
    • 结果分析:

问题:
   将给定数据元素按照从小到大排序
快速排序思路:
   通过一趟排序将数据分成两个独立的部分,再分别对两部分数据快速排序(运用递归的思想)

完整程序:

#include #include void quick_sort(int *array,int start,int end);void show(int *array,int length);int partition(int *array,int start,int end);void main(){    //给定数组元素    int array[] = {9,7,18,4,10,18,5,3,80,25};  //计算数组长度       int length = sizeof(array) / sizeof(array[0]);    //排序    quick_sort(array,0,length - 1);    //显示排序后数组内容    show(array,length);    system("pause");    return ;}int partition(int *array,int start,int end){    int key = array[start];//保存每次排序数组的第一个位置数据    while( start < end)    {    //从尾部数据开始和key比较,若key <= array[end]则不用交换数据,反之结束while循环 while(start < end && key <= array[end]) {     end--; } if(start < end) { //将判断array[end]放在array[start]处 end 处的位置现在没有存放数据,为空     array[start] = array[end];     start++;//start后移一位 }//当key > array[start]时start继续后移,不用交换数据,反之while循环结束 while(start < end && key > array[start]) {     start++; } if(start < end) { //将array[start]的数据放在上次end的空位处,此时start位置为空     array[end] = array[start];     end--;//end前移一位 }    }    array[start] = key;//将第一个位置的值放在空位置上    return start;//将分割位置的下标返回}void quick_sort(int *array,int start,int end){      int flag ;//用于保存分割左右两边的数组下标    if(start < end)    { flag = partition(array,start,end); quick_sort(array,start,flag - 1);//左边排序 quick_sort(array,flag + 1,end);//右边排序    }}//输出数组内容void show(int *array,int length){printf("排序后的数组为:\n");    for(int i = 0;i < length;i++)    { printf("%d\t",array[i]);    }    printf("\n");}

测试结果:

在这里插入图片描述

结果分析:

按照程序执行步骤逐步解析
在这里插入图片描述
声明:此文章为学习笔记,如有侵权请联系删除。