排序之快速排序(C++实现)

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。

快速排序的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此我的对快速排序作了进一步的说明:挖坑填数+分治法:

先来看实例吧,定义下面再给出(最好能用自己的话来总结定义,这样对实现代码会有帮助)。

以一个数组作为示例,取区间第一个数为基准数。

快速排序用C++实现如下:

//快速排序
#include <cstdio>
#include <iostream>
 
using namespace std;
void quick_sort(int s[], int l, int r)
{
    if (l < r)
    {
        //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
        int i = l, j = r, x = s[l];
        while (i < j)
        {
            while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
                j--;  
            if(i < j) 
                s[i++] = s[j];
            
            while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
                i++;  
            if(i < j) 
                s[j--] = s[i];
        }
        s[i] = x;
        quick_sort(s, l, i - 1); // 递归调用 
        quick_sort(s, i + 1, r);
    }
}

int main() {
    /* Code to test the MergeSort function. */
 
    int A[] = {9,5,8,1,9,10,15,13,12,17}; // creating an array of integers.
    int i,j;
    j = sizeof(A)/sizeof(A[0]);
 
    // Calling quick sort to sort the array.
    quick_sort(A,i,j);
 
    //printing all elements in the array once its sorted.
    for(i = 0;i < j;i++)
       cout << " " << A[i];
    return 0;


本文参考链接及学习资料:


原文:白话经典算法系列之六 快速排序 快速搞定https://blog.csdn.net/MoreWindows/article/details/6684558 
 

猜你喜欢

转载自blog.csdn.net/xiu351084315/article/details/89301475