zoukankan      html  css  js  c++  java
  • 排序算法之快速排序

    直接上代码:

    void swap(int a[],int m,int n) {
        int temp = a[m];
        a[m] = a[n];
        a[n] = temp;
    }
    //开始的时候left是数组的起始位置0,right是数组最后一个元素的下标(这里是8)
    void quickSort(int a[],int left ,int right) {
    //从小到大排序{50,10,90,30,70,40,80,60,20}
        int low = left;
        int high = right;
        int partition = a[low];
        if (left>=right) {
            return;
        }
        
        while (low!=high) {
            while (low<high &&a[high]>=partition) {   //如果右边值大于partition
                high--;
            }
            if (low<high) {
                  swap(a, low, high);
            }
          
            while (low<high && a[low]<=partition) {
                low++;
            }
            if (low<high) {
                swap(a, low, high);
            }
         
        }
    //    printArr(a,9);
        quickSort(a, left, low-1);
        quickSort(a, low+1, right);
    }

    这里我定义了一个排序算法,一个交换算法。

    不太理解?看着太复杂?那就往下看吧。

    先介绍一下其原理:(这里我们按照从小到大排序)

    首先,需要找第一个或者最后一个元素作为枢纽,然后用枢纽将数组分成两部分,大于枢纽的放在枢纽右边,小于枢纽的放在枢纽左边。举个栗子:

    {50,30,40,74,23,67,56,68};

    这个数组中我们选择第一个元素作为枢纽50,那么我们要做的就是把数组中小于50的数都放到50左边,大于50的数放在50右边。但是左边(或右边)的数不一定有序。例如

    {30,40,23,50,74,56,67,68}

    这样只是大致有序。

    然后我们将枢纽50左边和右边分开,即成为两个数组

    {30,40,23}和{74,56,67,68}

    然后在按照上边的方法找一个枢纽再次进行排序:

    将30作为枢纽,得到结果:{23,30,40}这样左边就有序了;

    然后对于另一个数组进行同样的操作。直至所有有序。

    现在再看一下上边的代码吧,应该有点好理解了吧。

    ----------------------------------------教你一招----------------------------------------

    理解了上面所说的原理之后,然后自己编写代码。或者就直接把我上边的代码拷贝一下进行断点分析,这样就能够更深刻的理解然后自己写出来。

    ----------------------------------------结束了----------------------------------------

    如果有啥疑问的尽管开口,知无不言。

    如果有什么意见或建议,尽管提出。

    谢谢。

  • 相关阅读:
    Mysql中的递归查询
    让git忽略对已经版本控制的文件的本地修改
    关于c#中逆变和协变的理解
    把之前的相关博客都迁到了博客园~
    结合github pages使用travis CI
    Spring中的Filter、HandlerInterceptor和AOP
    HDU1711 Number Sequence 题解 KMP算法
    HDU1358 Period 题解 KMP算法
    HDU1686 Oulipo 题解 KMP算法
    HDU3336 Count the string 题解 KMP算法
  • 原文地址:https://www.cnblogs.com/zhanggui/p/4741052.html
Copyright © 2011-2022 走看看