黑马程序员技术交流社区

标题: C语言之快速排序算法 [打印本页]

作者: strongfish    时间: 2015-7-15 10:06
标题: C语言之快速排序算法
快速排序算法。好复杂。
  1. # include <stdio.h>

  2. void qusort(int[], int, int);

  3. int main()
  4. {
  5.         int arr[10] = { 9, 5, 3, 8, 0, 3, 4, 2, 5, 6 }; //定义需要排序的数据

  6.         qusort(arr, 0, 9); //执行排序函数

  7.         for (int i = 0; i < 10; i++)
  8.         {
  9.                 printf("%d ", arr[i]); //排序后的数据输出
  10.         }
  11.         putchar('\n');


  12.         return 0;
  13. }

  14. void qusort(int arr[], int begin, int end) //第一个参数为需要排序的数组 第二个参数和第三参数确定 需要排序的数据区间
  15. {
  16.         if (end - begin < 1) return; //元素太少 则不需要排序

  17.         int left = begin;  // 左索引
  18.         int right = end;   // 右索引
  19.         int standard = arr[begin];// 基准值

  20.         while (left < right)
  21.         {
  22.                 while (left < right && standard < arr[right]) right--; //从右向左 查找小于基准值的索引

  23.                 if (left < right) //如果找到了则 left<right  否则 left == right
  24.                 {
  25.                         arr[left] = arr[right]; //将找到的值放到相应的位置(分界之左)
  26.                         left++; //左位置右移一个索引
  27.                 }

  28.                 while (left < right && arr[left] <= standard) left++; //从左向右 查找大于基准的值得索引

  29.                 if (left < right) //如果找到了则 left<right  否则 left == right
  30.                 {
  31.                         arr[right] = arr[left]; //将找到的值放入相应的位置(分界之右)
  32.                         right--; //右位置左移一个索引
  33.                 }
  34.         }

  35.         arr[left] = standard; //将基准值放置到分界点(分界点是不确定的)

  36.         //递归调用
  37.         qusort(arr, begin, right - 1);  //对左区间排序
  38.         qusort(arr, right + 1, end);  //对右区间排序

  39. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2