快速排序

Posted zhuifeng-mayi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。

快速排序的思想是:

在整个数列中,选取一个特征点,一般以数列的中心为该特征点,使其小于特征点的数放在特征点的左侧,大于特征点的数放在右侧。

(1)若特征点最左侧的数小于特征点,而特征点最右侧的数大于特征点,则左侧数右移一位,而右侧色数左移一位

(2)若此时左侧的数值大于特征点,而右侧的数字小于特征点,则两者数值调换

(3)若左侧数值大于特征点,右侧数值也大于特征点,则右侧特征点左移一位,直到此时特征点右侧的数值小于特征点,将特征点左右两侧色数值互调

(4)若左侧数值小于特征点,右侧数值也小于特征点,则左侧特征点右移一位,直到此时特征点左侧的数值大于特征点,将特征点左右两侧色数值互调

(5)然后采用递归的方式,使其整个数列呈现递增。

#include<iostream>
using namespace std;

void quick_sort(int num[], int left, int right)
{
    int i = left;                 //数列的左下标赋给i
    int j = right;                //数列的右下标赋给j
    int povit = num[(i+j) / 2];   //找特征值
    while ( i <= j)               //当i<j时
    {
        while (num[i] < povit)    //左侧值小于特征点
        {
            i++;                  //右移
        }
        while (num[j]>povit)      //右侧值大于特征点
        {
            j--;                  //左移
        } 
        if (i <= j)               //特征点左右两侧数值对调
        {
            int temp = num[i];
            num[i] = num[j];
            num[j] = temp;
            i++;
            j--;
        }
    }
    if (i < right)                // 例: 1,2,3,4,5,6,8,7状况
    {
        quick_sort(num, i, right);
    }
    if (left < j)                 // 列: 2,1,3,4,5,6,7,8状况
    {
        quick_sort(num, left, j);
    }
}


int main()
{
    int a[] = { 1, 3, 4, 6, 2, 7, 8, 1 };
    quick_sort(a, 0, 7);
    for (int i = 0; i < 8; i++)
    {
        cout << a[i] << endl;
    }
    system("pause");
    return 0;
}

 

以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

如何使用sublime代码片段快速输入PHP头部版本声明

代码片段如何使用CSS来快速定义多彩光标

vs2003:快速片段工具