zoukankan      html  css  js  c++  java
  • 快速排序,冒泡排序的升级版

    一、实现思想

      1、选定一个轴值(一般是选一组数据中的第一个)

      2、使这个轴值相对于整个数组是有序的,轴值左边比轴值小,轴值右边比轴值大(通过轴值的左右扫描可以得到)

      3、将轴值得左边、右边分别看成一个新的数组,再分别选一个新轴值,使新轴值相对于新数组有序

      4、其实就是将一个数组,递归地划分为许多个小数组,然后轴值左右小数组有序,最后整个数组有序

    二、例子

     三、实现代码

     1 #include <stdio.h>
      //这里把数组定义成全局的,方便一点,你也可以把数组作参数传下去。 2 int array[7] = {23, 13, 35, 6, 19, 50, 28}; 3 // 一次快排的函数 4 int Partition(int first, int last) 5 { 6 //为什么要多搞一个参数来接,因为first和last要递归传下去 7 int i = first; 8 int j = last; 9 int temp; 10 while (i < j) 11 { 12 // 右边扫描 13 while (i < j && array[i] <= array[j]) 14 j--; 15 if (i < j) 16 { 17 temp = array[j]; 18 array[j] = array[i]; 19 array[i] = temp; 20 } 21 // 左边扫描 22 while (i < j && array[i] <= array[j]) 23 i++; 24 if (i < j) 25 { 26 temp = array[j]; 27 array[j] = array[i]; 28 array[i] = temp; 29 } 30 } 31 return i; 32 } 33 void quickSort(int first, int last) 34 { 35 int i = Partition(first, last); 36 if (i - 1 > first) 37 quickSort(first, i - 1); 38 if (i + 1 < last) 39 quickSort(i + 1, last); 40 return; 41 /* 你还可以这样写,更加简洁一些 */ 42 // if (first >= last) return; 43 // int i = Partition(first, last); 44 // quickSort(first, i - 1); 45 // quickSort(i + 1, last); 46 } 47 int main(void) 48 { 49 for (int i = 0; i < 7; i++) 50 printf("%d ", array[i]); 51 printf(" "); 52 quickSort(0, 6); 53 // Partition(0, 6); 54 for (int i = 0; i < 7; i++) 55 printf("%d ", array[i]); 56 } 57 /* 58 输出 59 —————————————————————————————————————————————— 60 23 13 35 6 19 50 28 61 6 13 19 23 28 35 50 62 —————————————————————————————————————————————— 63 */
  • 相关阅读:
    定理环境
    tcolorbox 宏包简明教程
    【专访】南科大数学系何炳生教授——四十年上下求索
    研究生导师为什么喜欢问学生家境?
    高德纳谈《具体数学》的诞生
    剑桥大学
    线性代数
    APPCAN的mas服务报错
    github删除仓库
    Angular2入门教程-2 实现TodoList App
  • 原文地址:https://www.cnblogs.com/coderon/p/13407470.html
Copyright © 2011-2022 走看看