|
Posted on
2009-03-25 12:49
Brucegao
阅读( 327)
评论()
编辑
收藏
举报
快速排序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
namespace QuickSort
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif) {
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public class QuickSort
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
public QuickSort()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private void Swap(ref int i, ref int j)
//swap two integer
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
int t;
t = i;
i = j;
j = t;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public void Sort(int[] list, int low, int high)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
if (high <= low)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
//only one element in array list
//so it do not need sort
return;
}
else if (high == low + 1)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
//means two elements in array list
//so we just compare them
if (list[low] > list[high])
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
//exchange them
Swap(ref list[low], ref list[high]);
return;
}
}
//more than 3 elements in the arrary list
//begin QuickSort
myQuickSort(list, low, high);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public void myQuickSort(int[] list, int low, int high)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
if (low < high)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
int pivot = Partition(list, low, high);
myQuickSort(list, low, pivot - 1);
myQuickSort(list, pivot + 1, high);
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private int Partition(int[] list, int low, int high)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
//get the pivot of the arrary list
int pivot;
pivot = list[low];
while (low < high)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
while (low < high && list[high] >= pivot)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
high--;
}
if (low != high)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
Swap(ref list[low], ref list[high]);
low++;
}
while (low < high && list[low] <= pivot)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
low++;
}
if (low != high)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
Swap(ref list[low], ref list[high]);
high--;
}
}
return low;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
class Program
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
static void Main(string[] args)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
QuickSort qu = new QuickSort();
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) int[] arr = new int[] { 23, 34, 45, 56, 67, 78, 21, 1, 3, 5, 8, 0 };
qu.myQuickSort(arr, 0, arr.Length - 1);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine("Data after QuickSort");
foreach (int i in arr)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) {
Console.Write(i + ",");
}
Console.Read();
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
|