zoukankan      html  css  js  c++  java
  • 快速排序【代码】

    思路参考《算法导论》P95

    这里有位老哥的文章写的挺形象的呀

    http://developer.51cto.com/art/201403/430986.htm

    我是参照书上实现的,觉得挺简单的

    -------------------------------------------------------代码-------------------------------------------------------

     1 // QUICKSORT.cpp: 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <iostream>
     6 #include <random>
     7 
     8 using namespace std;
     9 
    10 int PARTITION(int *A, int p, int r)
    11 {
    12     int x = A[r];
    13     int i = p - 1;
    14     int temp;
    15     for (int j = p; j < r; j++)
    16     {
    17         if (A[j] <= x)
    18         {
    19             i++;
    20             temp = A[i];
    21             A[i] = A[j];
    22             A[j] = temp;
    23         }
    24     }
    25     temp = A[i+1];
    26     A[i+1] = A[r];
    27     A[r] = temp;
    28     return i+1;
    29 }
    30 
    31 int QUICKSORT(int *A,int p,int r)
    32 {
    33     if (p < r)
    34     {
    35         int q = PARTITION(A,p,r);
    36         QUICKSORT(A, p, q - 1);
    37         QUICKSORT(A, q + 1, r);
    38     }
    39     return 0;
    40 }
    41 
    42 //------------------------------随机化版本--------------------------------
    43 
    44 int RANDOM_PARTITION(int *A, int p, int r)
    45 {
    46     uniform_int_distribution<unsigned> u(p,r);
    47     default_random_engine e;
    48     int i = u(e);//生成[p,r]之间的随机数
    49     int temp = A[i];
    50     A[i] = A[r];
    51     A[r] = temp;
    52     return PARTITION(A,p,r);
    53 }
    54 
    55 int RANDOM_QUICKSORT(int *A, int p, int r)
    56 {
    57     if (p < r)
    58     {
    59         int q = RANDOM_PARTITION(A, p, r);
    60         RANDOM_QUICKSORT(A, p, q - 1);
    61         RANDOM_QUICKSORT(A, q + 1, r);
    62     }
    63     return 0;
    64 }
    65 
    66 
    67 int main()
    68 {
    69     int A[] = { 2,8,7,1,3,5,6,4 };
    70     int B[] = { 2,8,7,1,3,5,6,4 };
    71     for (auto c : A)
    72         cout << c << ends;
    73     cout << endl;
    74 
    75     QUICKSORT(A,0,7);
    76     for (auto c : A)
    77         cout << c << ends;
    78     cout << endl;
    79 
    80     RANDOM_QUICKSORT(B, 0, 7);
    81     for (auto c : B)
    82         cout << c << ends;
    83     cout << endl;
    84     return 0;
    85 }

    运行结果:

  • 相关阅读:
    准备 LVM Volume Provider
    掌握 cinder-scheduler 调度逻辑
    Cinder 组件详解
    掌握 Cinder 的设计思想
    理解 Cinder 架构
    1 张图秒懂 Nova 16 种操作
    计算节点宕机了怎么办?- 每天5分钟玩转 OpenStack(43)
    Live Migrate 操作
    Resize Instance 操作详解
    关于Linux的10个核心面试问题与答案
  • 原文地址:https://www.cnblogs.com/njuxjx/p/8280751.html
Copyright © 2011-2022 走看看