zoukankan      html  css  js  c++  java
  • 排序算法(二)-快速排序

    快速排序就是随意找个基准数(就是一个用来参照的数,看下面就知道做什么的了)。在一个数组a[10]中随意找个数,假如这个数是a[0]=8。方法很简单,从右向左找一个小于8的数,从左向右找一个大于8的数,然后交换他们。这里可以用两个变量ij,分别指向数列的最左面和最右面,首先j出动,因为我们这里的基准数是最左面的数,所以j先出动,然后j一步步的往左走,直到找到小于8的数;之后i一步步往右走,直到找到大于8的数,然后交换ij指向的值。就这样交换交换交换,直到ij相等,当ij相等时,交换a[0]i/j指向的数。这一次的最后的结果就是8到了最终结果的正确位置。现在第一轮结束,以8为分界点,将这个数组分成两组,对这两组分别进行上述过程,直到数字全部归位。快速排序的秘诀就是每一轮将一个数归位(即将基准数排到最后结果的正确位置)。

    下面将上述功能实现,看下代码能不能看懂

    #include <iostream>

    using namespace std;

    void QuickSort(int *p,int left,int right)
    {
        int *q=p;//保存数组首项的地址,因为要递归,每次都应该传这个数组的首项

        if(left>right)
            return;
        int i=left;
        int j=right;
        int temp=p[i];

        while(i<j)
        {
            while(i<j&&temp<=p[j])
                j--;
            while(i<j&&temp>=p[i])
                i++;

            if(i!=j)
            {
                int t=p[i];
                p[i]=p[j];
                p[j]=t;
            }
        }
        p[left]=p[i];
        p[i]=temp;

        p=q;//将数组首项的地址重新给p
        QuickSort(p,left,i-1);//二分法,递归
        QuickSort(p,i+1,right);
    }

    
    
  • 相关阅读:
    51nod乘积之和
    Dell服务器安装OpenManage(OMSA)
    Nginx反向代理PHP
    搭建haproxy
    108. Convert Sorted Array to Binary Search Tree
    60. Permutation Sequence
    142. Linked List Cycle II
    129. Sum Root to Leaf Numbers
    118. Pascal's Triangle
    26. Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/mengnan/p/4890418.html
Copyright © 2011-2022 走看看