zoukankan      html  css  js  c++  java
  • 数据结构: 快速排序

     1 void quick_sort(int a[], int l, int r)
     2 {
     3     if (l < r)
     4     {
     5         int i,j,x;
     6 
     7         i = l;
     8         j = r;
     9         x = a[i];
    10         while (i < j)
    11         {
    12             while(i < j && a[j] > x)
    13                 j--; // 从右向左找第一个小于x的数
    14             if(i < j)
    15                 a[i++] = a[j];
    16             while(i < j && a[i] < x)
    17                 i++; // 从左向右找第一个大于x的数
    18             if(i < j)
    19                 a[j--] = a[i];
    20         }
    21         a[i] = x;
    22         quick_sort(a, l, i-1); /* 递归调用 */
    23         quick_sort(a, i+1, r); /* 递归调用 */
    24     }
    25 }

    上图只是给出了第1趟快速排序的流程。在第1趟中,设置x=a[i],即x=30。
    (01) 从"右 --> 左"查找小于x的数:找到满足条件的数a[j]=20,此时j=4;然后将a[j]赋值a[i],此时i=0;接着从左往右遍历。
    (02) 从"左 --> 右"查找大于x的数:找到满足条件的数a[i]=40,此时i=1;然后将a[i]赋值a[j],此时j=4;接着从右往左遍历。
    (03) 从"右 --> 左"查找小于x的数:找到满足条件的数a[j]=10,此时j=3;然后将a[j]赋值a[i],此时i=1;接着从左往右遍历。
    (04) 从"左 --> 右"查找大于x的数:找到满足条件的数a[i]=60,此时i=2;然后将a[i]赋值a[j],此时j=3;接着从右往左遍历。
    (05) 从"右 --> 左"查找小于x的数:没有找到满足条件的数。当i>=j时,停止查找;然后将x赋值给a[i]。此趟遍历结束!

    按照同样的方法,对子数列进行递归遍历。最后得到有序数组;

    快速排序实现代码:

     1 #include <iostream>
     2 using namespace std;
     3 void quickSort(int* a, int l, int r)
     4 {
     5     if (l < r)
     6     {
     7         int i,j,x;
     8         i = l;
     9         j = r;
    10         x = a[i];
    11         while (i < j)
    12         {
    13             while(i < j && a[j] > x)
    14                 j--; // 从右向左找第一个小于x的数
    15             if(i < j)
    16                 a[i++] = a[j];
    17             while(i < j && a[i] < x)
    18                 i++; // 从左向右找第一个大于x的数
    19             if(i < j)
    20                 a[j--] = a[i];
    21         }
    22         a[i] = x;
    23         quickSort(a, l, i-1); /* 递归调用 */
    24         quickSort(a, i+1, r); /* 递归调用 */
    25     }
    26 }
    27 int main()
    28 {
    29     int i;
    30     int a[] = {30,40,60,10,20,50};
    31     int ilen = (sizeof(a)) / (sizeof(a[0]));
    32     cout << "before sort:";
    33     for (i=0; i<ilen; i++)
    34         cout << a[i] << " ";
    35     cout << endl;
    36     quickSort(a, 0, ilen-1);
    37     cout << "after  sort:";
    38     for (i=0; i<ilen; i++)
    39         cout << a[i] << " ";
    40     cout << endl;
    41     return 0;
    42 }
    天晴了,起飞吧
  • 相关阅读:
    alpha版、beta版、rc版的意思
    回车符(CR)与换行符(LF), ' '和' '的区别
    html 图像映射(一个图像多个连接)
    前端工程师需要明白的「像素」
    通过设置Ionic-Cli代理解决ionic serve跨域调试问题
    Bootstrap Table使用方法详解
    写给移动开发者的 React Native 指南
    Mac中搭建 iOS 的 React Native 环境
    Windows版本搭建安装React Native环境配置及相关问题
    javascript获取wx.config内部字段解决微信分享
  • 原文地址:https://www.cnblogs.com/jianqiao123/p/12129795.html
Copyright © 2011-2022 走看看