namespace ConsoleApp
{
static class Program
{
static void Main(string[] args)
{
int[] ss = new int[] { 7, 2, 8, 3, 4, 1, 11, 9, 234, 72, 5 };
KSPX(ss, 0, ss.Length - 1);
Console.ReadKey();
}
/// <summary>
/// 快速排序
/// </summary>
/// <param name="ss"></param>
/// <param name="left_ys"></param>
/// <param name="right_ys"></param>
private static void KSPX(int[] ss, int left_ys, int right_ys)
{
if (right_ys - left_ys > 0) //跳出递归
{
var left = left_ys; //获得位置,因为left是要变动的,所以不能直接用left_ys
var right = right_ys;
var x = ss[left++]; //记录第一个数据,然后移动下标,跳过第一个数据
while (left < right) //没相撞的情况下
{
while (ss[right] > x && left < right) //从右向左逐个查找,大于就跳过,小于就跳出循环
{
right--;
}
while (ss[left] < x && left < right) //从左往右找小于的
{
left++;
}
if (left < right) //可能经过上面的操作left>=right,所以这里要判断下
{
//将找到的2个数值进行替换
var tmp = ss[left];
ss[left] = ss[right];
ss[right] = tmp;
//替换后移动下标
left++;
right--;
}
}
if (ss[left_ys] > ss[left]) //检查完毕后,将基准值和最后left(小于)下标指向的数据进行替换,前提是基准值大于left(可能会出现小于的现象——基准值本来就是最小的)
{
ss[left_ys] = ss[left];
ss[left] = x;
}
KSPX(ss, left_ys, left - 1); //递归右半部份
KSPX(ss, left + 1, right_ys); //递归左半部分
}
}
/// <summary>
/// 选择排序
/// </summary>
/// <param name="ss"></param>
private static void XZPX(int[] ss)
{
for (int i = 0; i < ss.Length; i++)
{
var index = i;
for (int j = (i + 1); j < ss.Length; j++)
{
if (ss[index] > ss[j])
{
index = j;
}
}
var tmp = ss[i];
ss[i] = ss[index];
ss[index] = tmp;
}
}
/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="ss"></param>
private static void MPPX(int[] ss)
{
for (int i = 0; i < ss.Length; i++)
{
for (int j = 0; j < ss.Length - 1 - i; j++)
{
if (ss[j] > ss[j + 1])
{
var tmp = ss[j];
ss[j] = ss[j + 1];
ss[j + 1] = tmp;
}
}
}
}
}
}