快速排序-(交换排序)

来源:互联网 发布:蓝小雨冠军销售 淘宝 编辑:程序博客网 时间:2024/05/21 07:58

思想:
图片过程
这里写图片描述

例子:32,12,7,78,23,45
1)首先找一个值作为轴,一般就选数组的第一个值(arr[0]中的值)key=32
2)第一步从数组最后一个值向前遍历找比key小的值(right指向的值23)找到后与数组前面的值交换(left指的32交换)
3)第二步就是反过来从左边找比key大的值(left指向的值78)找到后与数组后面的值交换(right指的23交换)
4)left与right位置重合后不用交换将key的值赋在pos位置

        现在数组中情况是:“23,12,7” 32 “78,45”以32为分界又有两组无序数

5)现在就是用函数的递归调用又同上面的思想一样将23,12,7和78,45两组数据进行排序

代码如下:

#include <stdio.h>void Quick_sort(int arr[], int left, int right){    int i, j, key, m;    if (left < right)    {        i = left;        j = right;        key = arr[i];        while (i<j&&arr[j]>key)//在数组右边找到比key大的值            j--;        if (i < j)//将右边比key大的值arr[j]与arr[i]交换        {            m = arr[i];            arr[i] = arr[j];            arr[j] = m;            i++;        }        while (i < j&&arr[i] <= key)//在数组左边找到比key小的值            i++;        if (i < j)//将左边比key小的值arr[j]与arr[i]交换        {            m = arr[j];            arr[j] = arr[i];            arr[i] = m;            j--;        }        arr[i] = key;        Quick_sort(arr, 0, i - 1);        Quick_sort(arr, i + 1, right);    }}int main(){    int i;    int arr[6] = { 32,12,7,78,23,45};    Quick_sort(arr, 0, 5);//因为数组的第五个单元就是第6个数啦    for (i = 0; i < 6; i++)        printf("%d ", arr[i]);    printf("\n");    return 0;}

运行截图:
这里写图片描述