• 快速排序


    总共大致分为几种,包括选择排序法,冒泡排序法,插入排序法,快速排序法和堆排序。
    其中比较简单的是选择冒泡和插入,比较抽象的就是快排和堆排。这里先讲快排,因为这也是比较常用的算法,包含在algorithm头文件里面。
    关于快排实际上就是分治思想和递归思想的结合。快排的函数是一个递归函数,其中将排序数组分治成为两块。
    每次都分治成为两块,然后将其中的第一个数作为标准值,大的放在标准值的后面,小的放在标准值的前面,最后将中间的数值和标准值交换位置。
    这实际上就是设置一个中间量,交换原数组中比标准值大的数和比标准值小的数的位置的事情,因为标准值是一个虚拟放在中间的数,最后将标准值放置到位。
    还有要利用的是数组的双排思想。什么叫数组的双排思想呢,说的就是数组里面不仅仅是元素,还有它的标号。通过标号来一个一个的寻找比较。
    这个思想解释的比较好的有一个网站,这里罗列下:算法 3:最常用的排序--快速排序
    #include <iostream>
    int a[100],n;
    using namespace std;
    void quicksort(int left,int right);
    int main()
    {
      cin>>n;
      for(int i=0;i<n;i++) {
      cin>>a[i];
    }
    quicksort(0,n-1);
    for(int i=0;i<n;i++) {
      cout<<a[i]<<" ";
    }
    return 0;
    }
    void quicksort(int left,int right)
    {
      int i,j,temp,t;
      if(left<right) {
      return;
    }
    i=left;
    j=right;
    temp=a[left];
    while(i!=j) {
    while(temp>a[j]&&i<j) {
      j--;
    }   
    while(temp<a[i]&&i<j) {   i++; } t=a[j]; a[j]=a[i]; a[i]=t; } a[left]=a[i]; a[i]=temp; quicksort(left,i-1); quicksort(i+1;right); }
  • 相关阅读:
    一个有趣的js现象
    根相对路径的简单例子
    几道简单有趣的js题(一)
    js流程控制题——如何实现一个LazyMan
    HTML5 十大新特性(十)——Web Socket
    HTML5 十大新特性(九)——Web Storage
    HTML5 十大新特性(八)——Web Worker
    HTML5 十大新特性(七)——拖放API
    HTML5 十大新特性(六)——地理定位
    HTML5 十大新特性(五)——SVG绘图
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/9297007.html
Copyright © 2020-2023  润新知