zoukankan      html  css  js  c++  java
  • 排序算法——快速排序

    快速排序的原理:在待排序的数字序列{0, 1, ... , n-1, n}中随机选择一个数字作为基准数(一般选择序列中的第一个数字),接着从最后一个元素开始,向前找小于基准数的元素,找到的话,把元素x的值赋到基准数的位置;接着从基准数的下一个位置开始向后查找大于基准数的元素,找到的话,把该元素的值赋到元素x的位置。直到向前和向后遍历的标尺位于同一个元素位置y,这个位置就是基准数应该被放置的位置,接着把基准数赋到y位置。接着,根据上一次基准数的位置y把序列分为两个子序列:{0, ..., y-1}和{y+1, ... , n};对这两个子序列分别使用上述算法继续排序,直至子序列长度为1。

    下面是对应的算法实现:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int quick_sort(int *arr, int begin, int end)
     5 {
     6     if (begin >= end)
     7         return 0;
     8 
     9     int temp = arr[begin];
    10     int head = begin;
    11     int rear = end;
    12     bool flag = false;
    13     while(head < rear)
    14     {
    15         if (!flag)
    16         {
    17             if (arr[rear] < temp)
    18             {
    19                 arr[head++] = arr[rear];
    20                 flag = true;
    21             }
    22             else
    23             {
    24                 rear--;
    25             }
    26         }
    27         else
    28         {
    29             if (arr[head] > temp)
    30             {
    31                 arr[rear--] = arr[head];
    32                 flag = false;
    33             }
    34             else
    35             {
    36                 head++;
    37             }
    38         }
    39     }
    40     arr[head] = temp;
    41     quick_sort(arr, begin, head-1);
    42     quick_sort(arr, head+1, end);
    43 
    44     return 0;
    45 }
    46 
    47 int sort(int *arr, int length)
    48 {
    49     quick_sort(arr, 0, length-1);
    50     return 0;
    51 }
    52 
    53 void print_logs(int *arr, int length)
    54 {
    55     for (int i = 0; i < length; ++i)
    56     {
    57         cout << arr[i];
    58         if (i != length-1)
    59         {
    60             cout << " , ";
    61         }
    62     }
    63     cout << endl;
    64 }
    65 
    66 int main()
    67 {
    68     int a[] = {2, 4, 5, 1, 3, 6, 9, 8, 7, 10, 32, 43, 15, 90, 55, 65, 65, 76, 91};
    69 
    70     int length = sizeof(a) / sizeof(*a);
    71     sort(a, length);
    72 
    73     print_logs(a, length);
    74 
    75     return 0;
    76 }
  • 相关阅读:
    Tomcat下HTTPS双向认证配置以及客户端调用案例
    Java本地运行中文正常,部署到Weblogic中文乱码
    gson 忽略掉某些字段不进行转换
    JavaScript中定义对象的四种方式
    使用CSS3实现超炫的Loading(加载)动画效果
    不要再使用JS框架了
    HTML5, CSS3, ES5新的web标准和浏览器支持一览 转
    js常用的事件对象
    jQuery用面向对象的思想来编写验证表单的插件
    五个值得尝试的前端开发工具
  • 原文地址:https://www.cnblogs.com/slz-coder150315/p/8597999.html
Copyright © 2011-2022 走看看