七大排序之快排(重点 面试基本都会问)

Posted jibisheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了七大排序之快排(重点 面试基本都会问)相关的知识,希望对你有一定的参考价值。

必须要明白的: 分治法+挖坑填数;

分治法:大问题分解成各个小问题,对小问题求解,使得大问题得以解决。

 

 1 #include<iostream>
 2 #include<time.h>
 3 #include<stdlib.h>
 4 #include<sys/timeb.h>
 5 using namespace std;
 6 
 7 const int Max = 10;
 8 
 9 void swap(int& a, int& b) {
10     int temp = a;
11     a = b;
12     b = temp;
13 }
14 
15 long getSystemTime() {
16     struct timeb tb;
17     ftime(&tb);
18     return tb.time * 1000 + tb.millitm;
19 }
20 void Print(const int* arr, int length) {
21     for (int i = 0; i < length; i++) {
22         cout << arr[i] << " ";
23     }
24 }
25 void QuickSort(int* arr, int start, int end) {
26     int i = start;
27     int j = end;
28     //这里注意key不能为arr[0];
29     int key = arr[start];
30     if (i < j) {
31         while (i < j) {
32             while (i < j && arr[j] >= key) {
33                 j--;
34             }
35             if (i < j) {
36                 arr[i] = arr[j];
37                 i++;
38             }
39             while (i < j && arr[i] < key)
40             {
41                 i++;
42             }
43             if (i < j) {
44                 arr[j] = arr[i];
45                 j--;
46             }
47         }
48         //下面三行代码不能放在if语句的外面
49         arr[i] = key;
50         QuickSort(arr, start, i - 1);
51         QuickSort(arr, i + 1, end);
52     }
53 
54 }
55 
56 int main() {
57     int arr[Max];
58     srand((unsigned)time(NULL));
59     for (int i = 0; i < Max; i++) {
60         arr[i] = rand() % Max;
61     }
62     cout << "排序前:
";
63     Print(arr, Max);
64     long pt = getSystemTime();
65     QuickSort(arr, 0, Max - 1);
66     long at = getSystemTime();
67     cout << "
排序后:
";
68     Print(arr, Max);
69 
70     cout << "
time of sort:" << at - pt << "ms
";
71 
72 
73     return 0;
74 }

 

以上是关于七大排序之快排(重点 面试基本都会问)的主要内容,如果未能解决你的问题,请参考以下文章

分治算法之快排和归并

排序之快排(JS)

JS--排序之快排和归并

排序之快排

七大排序算法(插排,希尔,选择排序,堆排,冒泡,快排,归并)--图文详解

分治法之快排&随机化