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);
    }

    
    
  • 相关阅读:
    邻接矩阵有向图的介绍
    Oracle库Delete删除千万以上普通堆表数据的方法
    Oracle 11g静默安装软件+手工创建数据库
    Oracle基础维护02-表、主键、索引、表结构维护手册
    批处理:Windows主机通过FTP下载远程Linux主机上文件
    Vertica license导入最佳实践
    各类数据库问题描述模板
    Oracle同义词+dblink的实际应用
    Oracle数据逻辑迁移综合实战篇
    Greenplum 数据库安装部署(生产环境)
  • 原文地址:https://www.cnblogs.com/mengnan/p/4890418.html
Copyright © 2011-2022 走看看