排序之快速排序

    由冒泡排序改进而来的。在待排序的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 }

 

posted on 2016-08-03 21:45  枝枝  阅读(175)  评论(0编辑  收藏  举报