快速排序,冒泡排序的升级版

一、实现思想

  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 */
原文地址:https://www.cnblogs.com/coderon/p/13407470.html