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

    最近闲来无事,研究了几种排序算法:

    一、直接插入排序

    基本思想:假设前面的n-1个数已经有序,将第n个数插入到前面的n-1个数中,使之依然有序。

    编码过程:依次将数组后面的数取出和前面的元素做比较,如果小于,则将其插入到目标元素的前面,然后依次将目标元素后面的元素后移。

    缺点:这种排序算法在移动数据的时候会耗费很大的计算量

    二、简单选择排序

    基本思想:从数组中选择最小的一个与第一个数交换位置,然后第二,第三,知道最后两个相比较。

    编程过程:循环遍历数组,直接交换数据位置。

    缺点:需要往复循环的遍历整个数组,在数组较大的时候效率低下

    三、快速排序

    基本思想:取一个基准数据,然后将数组划分为两个部分,递归

    编程过程:取第一个数作为基准,遍历整个数组,将数组分为两个部分,再分别对两个部分做同样的操作,直到有序。

    该方法采用分而治之的办法,将数组依次拆分,效率较高,一百万的随机数采用快速排序耗时128毫秒

      public static void quickSort(int[] numbers, int start, int end){

    if (start < end) {   

    int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)   

    int temp; // 记录临时中间值   

    int i = start, j = end;   

    do {   

    while ((numbers[i] < base) && (i < end))   

    i++;   

    while ((numbers[j] > base) && (j > start))   

    j--;   

    if (i <= j) {   

    temp = numbers[i];   

    numbers[i] = numbers[j];   

    numbers[j] = temp;   

    i++;   

    j--;   

    }   

    } while (i <= j);   

    if (start < j)   

    quickSort(numbers, start, j);   

    if (end > i)   

    quickSort(numbers, i, end);   

    }   

    }

  • 相关阅读:
    输出控制符的详解
    printf函数的讲解
    关于字节、Ascll码、字符的存储的讲解
    1.2
    1.1
    OS模块学习笔记
    time时间模块总结
    编译py为exe
    python计算excel平均值和标准差
    Python与Excel交互--Xlwings
  • 原文地址:https://www.cnblogs.com/canmeng-cn/p/6122969.html
Copyright © 2011-2022 走看看