using System;
using System.Linq;
class P
{
static void Main()
{
const int Min=6,Max=21;
var R=new Random();
var arr=Enumerable.Range(Min,Max-Min+1).ToArray();
Action<int[]> Rand=(int[] a)=>{
for(int i=0,j,t;i<a.Length;i++)
{
j=R.Next(0,Max-Min+1);
t=a[i];
a[i]=arr[j];
a[j]=t;
}
};
Action<int[]> Print=(int[] a)=>{
Array.ForEach(a,e=>Console.Write("{0},",e));
Console.WriteLine();
};
Action<string,Action<int[]>> Sort=(string msg,Action<int[]> ac)=>{
int[] dst=new int[arr.Length];
Array.Copy(arr,dst,arr.Length);
Console.WriteLine("{0}前:",msg);
Print(dst);
ac(dst);
Console.WriteLine("{0}后:",msg);
Print(dst);
Console.WriteLine();
};
Rand(arr);
Sort("选择排序",SelectSort);
Sort("鸡尾酒排序",CocktailSort);
Sort("冒泡排序1",BubbleSort1);
Sort("冒泡排序2",BubbleSort2);
Console.Write("按任意键继续。。。");
Console.ReadKey(true);
}
static void Swap<T>(ref T a,ref T b)
{
T x=a;
a=b;
b=x;
}
//选择排序
static void SelectSort(params int[] arr)
{
int a;
for(int i=0;i<arr.Length-1;i++)
{
a=i;
for(int j=i+1;j<arr.Length;j++)
if(arr[j]<arr[a])
a=j;
if(a!=i)
{
Swap(ref arr[i],ref arr[a]);
}
}
}
//鸡尾酒排序
static void CocktailSort(params int[] arr)
{
int a,b;
for(int i=0,j=arr.Length-1;i<j;i++,j--)
{
a=b=i;
for(int k=i;k<=j;k++)
{
if(arr[k]<arr[a])
a=k;
else if(arr[k]>arr[b])
b=k;
}
if(a!=i)
{
Swap(ref arr[i],ref arr[a]);
if(b==i)
b=a;
}
if(b!=j)
{
Swap(ref arr[j],ref arr[b]);
}
}
}
//冒泡排序1
static void BubbleSort1(params int[] arr)
{
int a=0;
bool sw=true;
while(sw)
{
sw=false;
for(int i=arr.Length-1;i>=a+1;i--)
{
//小数上浮
if(arr[i]<arr[i-1])
{
Swap(ref arr[i],ref arr[i-1]);
sw=true;
}
}
a++;
}
}
//冒泡排序2
static void BubbleSort2(params int[] arr)
{
bool sw=true;
for(int i=0;sw&&i<arr.Length-1;i++)
{
sw=false;
for(int j=0;j<arr.Length-1-i;j++)
{
//大数下沉
if(arr[j]>arr[j+1])
{
Swap(ref arr[j],ref arr[j+1]);
sw=true;
}
}
}
}
}
using System.Linq;
class P
{
static void Main()
{
const int Min=6,Max=21;
var R=new Random();
var arr=Enumerable.Range(Min,Max-Min+1).ToArray();
Action<int[]> Rand=(int[] a)=>{
for(int i=0,j,t;i<a.Length;i++)
{
j=R.Next(0,Max-Min+1);
t=a[i];
a[i]=arr[j];
a[j]=t;
}
};
Action<int[]> Print=(int[] a)=>{
Array.ForEach(a,e=>Console.Write("{0},",e));
Console.WriteLine();
};
Action<string,Action<int[]>> Sort=(string msg,Action<int[]> ac)=>{
int[] dst=new int[arr.Length];
Array.Copy(arr,dst,arr.Length);
Console.WriteLine("{0}前:",msg);
Print(dst);
ac(dst);
Console.WriteLine("{0}后:",msg);
Print(dst);
Console.WriteLine();
};
Rand(arr);
Sort("选择排序",SelectSort);
Sort("鸡尾酒排序",CocktailSort);
Sort("冒泡排序1",BubbleSort1);
Sort("冒泡排序2",BubbleSort2);
Console.Write("按任意键继续。。。");
Console.ReadKey(true);
}
static void Swap<T>(ref T a,ref T b)
{
T x=a;
a=b;
b=x;
}
//选择排序
static void SelectSort(params int[] arr)
{
int a;
for(int i=0;i<arr.Length-1;i++)
{
a=i;
for(int j=i+1;j<arr.Length;j++)
if(arr[j]<arr[a])
a=j;
if(a!=i)
{
Swap(ref arr[i],ref arr[a]);
}
}
}
//鸡尾酒排序
static void CocktailSort(params int[] arr)
{
int a,b;
for(int i=0,j=arr.Length-1;i<j;i++,j--)
{
a=b=i;
for(int k=i;k<=j;k++)
{
if(arr[k]<arr[a])
a=k;
else if(arr[k]>arr[b])
b=k;
}
if(a!=i)
{
Swap(ref arr[i],ref arr[a]);
if(b==i)
b=a;
}
if(b!=j)
{
Swap(ref arr[j],ref arr[b]);
}
}
}
//冒泡排序1
static void BubbleSort1(params int[] arr)
{
int a=0;
bool sw=true;
while(sw)
{
sw=false;
for(int i=arr.Length-1;i>=a+1;i--)
{
//小数上浮
if(arr[i]<arr[i-1])
{
Swap(ref arr[i],ref arr[i-1]);
sw=true;
}
}
a++;
}
}
//冒泡排序2
static void BubbleSort2(params int[] arr)
{
bool sw=true;
for(int i=0;sw&&i<arr.Length-1;i++)
{
sw=false;
for(int j=0;j<arr.Length-1-i;j++)
{
//大数下沉
if(arr[j]>arr[j+1])
{
Swap(ref arr[j],ref arr[j+1]);
sw=true;
}
}
}
}
}