c语言-快速排序

https://zhuanlan.zhihu.com/p/350934702

快速排序是对冒泡排序的一种改进,采用了一种分治的策略。
思路:将当前的基准数放到其应该在的位置

步骤:
入参(arr,low,high)

  1. 决定基准数arr[low],left=low,right=high
  2. 从右向左找第一个小于基准数的数字,标记下标 left
  3. 从左向右找第一个大于基准数的数字,标记下标 right
  4. 如果left和right没有重合,就交换这两个数
  5. 如果left和right重合了,说明当前这个下标就是我们的基准数应该在的位置,交换基准数和这个下标的数
  6. 递归对左右两个数组调用快排函数
/*****************************************************
File name:Quicksort
Author:Zhengqijun    Version:1.0    Date: 2016/11/04
Description: 对数组进行快速排序
Funcion List: 实现快速排序算法
*****************************************************/
 
#include <stdio.h>
#include <stdlib.h>
 
#define BUF_SIZE 10
 
/**************************************************
 *函数名:display
 *作用:打印数组元素
 *参数:array - 打印的数组,maxlen - 数组元素个数
 *返回值:无
 **************************************************/
void display(int array[], int maxlen)
{
    int i;
 
    for(i = 0; i < maxlen; i++)
    {
        printf("%-3d", array[i]);
    }
    printf("\n");
 
    return ;
}
 
/************************************
 *函数名:QuickSort
 *作用:快速排序算法
 *参数:
 *返回值:无
 ************************************/
void QuickSort(int *arr, int low, int high)
{
    if (low < high)
    {
        int left = low;
        int right = high;
        int base = arr[low];
        
        while(left<right){
            while(left < right && arr[right]>=base){
                right--;
            }

            while(left < right && arr[left]<=base){
                left++;
            }

            if(left<right){
                int temp=arr[left];
                arr[left]=arr[right];
                arr[right]=temp;
            }
        }

        //当跳出上面的while循环的时候说明left与right重合了
        //将基准数与left调换
        int temp=arr[low];
        arr[low]=arr[left];
        arr[left]=temp;

        // 递归调用
        QuickSort(arr, low, left - 1);     // 排序k左边
        QuickSort(arr, left + 1, high);    // 排序k右边
    }
}
 
// 主函数
int main()
{
    int array[BUF_SIZE] = {12,85,25,16,34,23,49,95,10,61};
    int maxlen = BUF_SIZE;
    
    // printf("before\n");
    // display(array, maxlen);
    
    QuickSort(array, 0, maxlen-1);  // 快速排序
    
    // printf("after\n");
    display(array, maxlen);
    
    return 0;
}
posted @ 2023-04-02 20:44  bcj7wi3kd5h1wd6  阅读(107)  评论(0编辑  收藏  举报