• 快速排序算法


    快速排序采用一种“分而治之、各个击破”的观念。

    快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。

    步骤为:

    1、从数列中挑出一个元素,称为 "基准"(pivot),

    2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

    3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

    递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

    下面是一个小例子:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace Quicksofttest
     8 {
     9     class Program
    10     {
    11         private static int[] values =new int[20];// {0, 1, 345, 2, 3, 45, 7, 43, 3, 6, 45, 345, 45, 32, 3, 75, 576, 56, 3, 2, 3456 };
    12         static void Main(string[] args)
    13         {
    14             Console.WriteLine("原來數組為:");
    15             Random radom = new Random();
    16             for (int i = 0; i < 20; i++)
    17             {
    18                 values[i] = radom.Next(100);
    19                 Console.Write(values[i]+" ");
    20             }
    21             Quicksoft(0,values.Length-1);
    22             Console.WriteLine("");
    23             Console.WriteLine("***********************************");
    24             Console.WriteLine("排序后:");
    25             foreach (var item in values)
    26             {
    27                 Console.Write(item + " ");
    28             }
    29             Console.Read();
    30         }
    31 
    32         private static void Quicksoft(int left, int right)
    33         {
    34             if (left>right)
    35             {
    36                 return;
    37             }
    38             int temp= values[left];
    39             int i = left;
    40             int j = right;
    41             while (i != j)
    42             {
    43                 //從右向左開始查找
    44                 while (values[j] >= temp&&i<j)
    45                 {
    46                     j--;
    47                 }
    48                 while (values[i] <= temp&&i<j)
    49                 {
    50                     i++;
    51                 }
    52                 if (i<j)
    53                 {
    54                     int t = values[i];
    55                     values[i] = values[j];
    56                     values[j] = t;
    57                 }
    58                 values[left] = values[i];
    59                 values[i] = temp;
    60                 Quicksoft(left,i-1);
    61                 Quicksoft(i+1, right);
    62 
    63             }
    64         }
    65 
    66        
    67        
    68     }
    69 }
  • 相关阅读:
    Beta冲刺置顶随笔
    Beta总结
    用户试用与调查报告
    Beta冲刺第七天
    Beta冲刺第六天
    Beta冲刺第五天
    Beta冲刺第四天
    Beta冲刺第三天
    Beta冲刺第二天
    爬虫基本操作
  • 原文地址:https://www.cnblogs.com/xuhongfei/p/4015507.html
Copyright © 2020-2023  润新知