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