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 */
  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/coderon/p/13407470.html
Copyright © 2011-2022 走看看