排序算法1:快速排序

   今儿闲着,实现了下一维数组快速排序算法。

快速排序分三个步骤(参考维基百科:http://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F):

1.选取一个基准值。(一般以第一个为基准)

2.重新排序,所有比基准小的都放在左边,所有比基准大的都放在右边。排序过后,该基准处于数列中间位置。(分治法中的分,以基准值为中心,分为左右两个分区)

3.递归的按照1、2两步骤排序左右两个分区。

 

控制台程序如下:

方法1:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace ConsoleApplication1
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             SortTest myTest = new SortTest();
13             myTest.SetMyArray(10);
14             for (int i = 0; i < 10; i++)
15             {
16                 Console.WriteLine(myTest.myArray[i]);
17             }
18             Console.WriteLine("快速排序");
19             myTest.QuickSort(myTest.myArray,0,9);
20             for (int i = 0; i < 10; i++)
21             {
22                 Console.WriteLine(myTest.myArray[i]);
23             }
24         }
25     }
26 
27     class SortTest
28     {
29         public int[] myArray;
30 
31         /// <summary>
32         /// 生成数组
33         /// </summary>
34         /// <param name="length"></param>
35         public void SetMyArray(int length)
36         {
37             System.Random random = new Random();
38             myArray = new int[length];
39             for (int i = 0; i < length; i++)
40             {
41                 myArray[i] = random.Next(100);
42             }
43         }
44 
45         /// <summary>
46         /// 排序分割
47         /// </summary>
48         /// <param name="array"></param>
49         /// <param name="low"></param>
50         /// <param name="high"></param>
51         /// <returns></returns>
52         public int ReturnIndex(int[] array,int low,int high)
53         {
54             int xMark = array[low];
55             while (low < high)
56             {
57                 //从右往左
58                 while (array[high] > xMark && low < high)
59                 {
60                     high--;
61                 }
62                 if (low < high)
63                 {
64                     array[low] = array[high];
65                     low++;
66                 }
67                 //从左往右
68                 while (array[low] < xMark && low < high)
69                 {
70                     low++;
71                 }
72                 if (low < high)
73                 {
74                     array[high] = array[low];
75                     high--;
76                 }
77             }
78             array[low] = xMark;
79             return low;
80         }
81 
82         /// <summary>
83         /// 快速排序
84         /// </summary>
85         /// <param name="array"></param>
86         /// <param name="low"></param>
87         /// <param name="high"></param>
88         public void QuickSort(int[] array, int low, int high)
89         {
90             if (low < high)
91             {
92                 int index = ReturnIndex(array, low, high);
93                 QuickSort(array, low, index - 1);//递归调用
94                 QuickSort(array, index + 1, high);
95             }
96         }
97     }
98 }

 方法2:维基百科中的方法,比第一个简洁,看着舒服。

         public static void Sort(int[] numbers)
        {
            Sort(numbers, 0, numbers.Length - 1);
        }

        private static void Sort(int[] numbers, int left, int right)
        {
            if (left < right)
            {
                int middle = numbers[(left + right)/2];
                int i = left -1;
                int j = right +1;
                while (true)
                {
                    while (numbers[++i] < middle) ;
                    while (numbers[--j] > middle) ;
                    if (i >= j)
                        break;
                    Swap(numbers,i,j);
                }
                Sort(numbers, left, i-1);
                Sort(numbers, j+1, right); 
            }
        }

        private static void Swap(int[] numbers, int i, int j)
        {
            int number = numbers[i];
            numbers[i] = numbers[j];
            numbers[j] = number;
        }

 

posted @ 2013-12-17 23:15  鸡毛土人  阅读(220)  评论(0)    收藏  举报