zoukankan      html  css  js  c++  java
  • 排序之快速排序

        由冒泡排序改进而来的。在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录放入适当位置后,数据序列被此记录划分成两部分。所有关键字比该记录关键字小的记录放置在前一部分,所有比它大的记录放置在后一部分,并把该记录排在这两部分的中间(称为该记录归位),这个过程称作一趟快速排序。

    特点:
    1)算法不稳定
    2)排序过程中需要定位表的上下界,适用于顺序
    3)n大时,快排是最快的
     1 #include <iostream>
     2 #include <stdlib.h>
     3 #include <stdio.h>
     4 #include <time.h>
     5 #include <vector>
     6 using namespace std;
     7 
     8 void show(vector<int> &number)
     9 {
    10     for (int i = 0; i < number.size(); i++)
    11     {
    12         cout << "number[" << i << "]    =    " << number[i] << endl;
    13     }
    14 }
    15 
    16 void show0(vector<int> &number)
    17 {
    18     for (int i = 0; i < number.size(); i++)
    19     {
    20         cout << number[i] << "  ";
    21         if ((i + 1) % 10 == 0)
    22         cout << endl;
    23     }
    24     cout << endl;
    25 }
    26 //排序算法之快速排序
    27 void Quicksort(vector<int> &number, int head, int tail)
    28 {
    29     if (head < tail)
    30     {
    31         int low = head;//每趟排序的头
    32         int high = tail;//每趟排序的尾
    33         int key = number[low];//每趟比较的数字
    34         while (low < high)
    35         {
    36             while (key < number[high] && low < high)
    37                 high--;
    38             if (low < high)
    39             {
    40                 number[low] = number[high];
    41                 low++;
    42             }
    43             while (key > number[low] && low < high)
    44                 low++;
    45             if (low < high)
    46             {
    47                 number[high] = number[low];
    48                 high--;
    49             }
    50         }
    51         number[low] = key;
    52         Quicksort(number, head, high - 1);
    53         Quicksort(number, high + 1, tail);
    54     }
    55 }
    56 
    57 int main()
    58 {
    59     srand((int)time(0));
    60     vector<int> number;
    61     int data = 0;
    62     for (int i = 0; i < 50; i++)
    63     {
    64         data = rand() % 200;
    65         number.push_back(data);
    66     }
    67     show0(number);
    68     cout << endl;
    69     Quicksort(number, 0, number.size() - 1);
    70     show0(number);
    71     cout << endl;
    72     system("pause");
    73 }
  • 相关阅读:
    gitblit 配置图文详解
    springmvc文件下载之文件名下划线问题终极解决方案
    redis实战进阶
    关于B+树, 你要了解的都在这里
    http的长连接和短连接(史上最通俗!)以及应用场景
    Base64的前世今生
    Springfox集成Swagger2实战篇
    Minio使用详解
    ubuntu系统五笔输入法安装
    YouTube排名第一的励志英文演讲《Dream(梦想)》
  • 原文地址:https://www.cnblogs.com/zhizhi25/p/5734697.html
Copyright © 2011-2022 走看看