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

    快速排序思想如下:

    分而治之。

    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]))
    Fork me on GitHub
  • 相关阅读:
    2020年SpringBoot面试题
    Java自带的性能监测工具
    jvm怎么判断哪些对象应该回收呢
    IDEA版本破解
    透彻解析Java类加载机制
    C# DataGridView使用BindingNavigator实现简单分页功能
    C# DataGridView使用自定义控件实现简单分页功能
    C# DataGridView自动保存列的宽度和位置
    C# DataGridView右键菜单自定义显示及隐藏列
    转:C# String为值类型还是引用类型
  • 原文地址:https://www.cnblogs.com/morec/p/14441300.html
Copyright © 2011-2022 走看看