快速排序

快速排序思想如下:

分而治之。

1、取待排序列的任意数作为基准点和队列作比较,把序列一分为二,左边是比基准数小的,右边比基准数大的。

2、再把已分的二个序列按照上边的步骤重复,直至序列不能再分。

从这里可以看出,一分为二的操作都是一样步骤,所以这里用到递归。具体请看视频:

https://b23.tv/LyGMD2

C#代码如下:

 1 using System;
 2 
 3 namespace Demo
 4 {
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             int[] arr = {7,12,5,8,4,2,10,15 };
10 
11             QuickSort(arr, 0, arr.Length-1);
12             foreach (var item in arr)
13             {
14                 Console.WriteLine(item);
15             }
16             Console.Read();
17         }
18 
19         static void QuickSort(int[] arr,int start,int end)
20         {
21             int temp = arr[start], i, j;
22             i = start;
23             j = end;
24             if (i < j)
25             {
26                 while (i < j)
27                 {
28                     while (i < j && temp < arr[j])
29                     {
30                         j--;
31                     }
32                     if (i < j)
33                     {
34                         arr[i] = arr[j];
35                         i++;
36                     }
37 
38                     while (i < j && temp > arr[i])
39                     {
40                         i++;
41                     }
42                     if (i < j)
43                     {
44                         arr[j] = arr[i];
45                         j--;
46                     }
47                 }
48                 arr[i] = temp;
49                 QuickSort(arr, start, i - 1);
50                 QuickSort(arr, i + 1, end);
51             }
52         }
53     }
54 }

 

C++代码如下:

 1 #include <iostream>
 2 void QuickSort(int arr[], int start, int end);
 3 void swap(int& a, int& b);
 4 
 5 int main()
 6 {
 7     int a[] = { 7,12,5,8,4,2,10,15 };
 8     int size = sizeof(a) / sizeof(int);
 9     QuickSort(a,0,size-1);
10     for (int i = 0; i < size; i++)
11     {
12         std::cout << a[i] << ", ";
13     }
14     std::cout << std::endl;
15 }
16 
17 void swap(int& a, int& b) 
18 {
19     int tmp = a;
20     a = b;
21     b = tmp;
22 }
23 
24 void QuickSort(int arr[],int start,int end) 
25 {
26     if (start > end)
27         return;
28     int k = arr[start];
29     int i = start, j = end;
30     while (i < j) {
31         while (j > i && arr[j] > k)
32             --j;
33         swap(arr[i],arr[j]);
34         while (i < j && arr[i] < k)
35             ++i;
36         swap(arr[i], arr[j]);
37     }
38     QuickSort(arr,start,i-1);
39     QuickSort(arr, i + 1, end);
40 }

 

Python代码如下:

 1 def quicksort (array):
 2     if len(array) < 2:
 3         return array
 4     else:
 5         pivot = array[0]
 6         less = [i for i in array[1: ] if i <= pivot]
 7         greater = [i for i in array[1: ] if i > pivot]
 8         return quicksort(less)+[pivot]+quicksort(greater)
 9     
10 print (quicksort([7,12,5,8,4,2,10,15]))
posted @ 2021-02-24 14:35  星仔007  阅读(59)  评论(0编辑  收藏  举报