快速排序是一种交换排序,使用分治法减小问题规模,再分别进行处理。另外快速排序一般是使用递归实现,如果待排序列规模较小,其效果不如简单插入排序。
简要原理:首先确定主元(基准),一头一尾两个数同时开始和主元比较,左边的数和主元比较,如果小就加一,如果大就停止。然后右边的数也一样,大就减一,否则停止,如果这两个数没有错位,则两数交换位置,重复这样的遍历过程直至错位,这就完成了一次划分。最后对这两部分分别又使用同样的方法进行快排,得到序列。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 排序
{
class Program
{
/// <summary>
/// 简化接口
/// </summary>
/// <param name="arr"></param>
public static void QuickSort(int[] A)
{
Quick_Sort(A, 0, A.Length - 1);
}
/// <summary>
/// 交换两个数
/// </summary>
/// <param name="arr"></param>
/// <param name="i"></param>
/// <param name="j"></param>
private static void swap(int[] arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
/// <summary>
/// 快速排序
/// </summary>
/// <param name="A"></param>
/// <param name="N"></param>
private static void Quick_Sort(int[] arr, int left, int right)
{
if (left < right)
{
int povit = arr[(left + right) / 2];
int low = left - 1;
int high = right + 1;
while (true)
{
while (arr[++low] < povit) ;
while (arr[--high] > povit) ;
if (low >= high) break;
swap(arr, low, high);
}
Quick_Sort(arr, left, low - 1);
Quick_Sort(arr, high + 1, right);
}
}
static void Main(string[] args)
{
string[] str = Console.ReadLine().Split('-');
int[] array = new int[str.Length];
for (int k = 0; k < str.Length; k++)
{
array[k] = Convert.ToInt32(str[k]);
}
QuickSort(array);
for (int a = 0; a < array.Length; a++)
{
Console.WriteLine(array[a]);
}
Console.ReadLine();
}
}
}
排序效果图如下: