

using System;
public abstract class SortStrategy
{
public abstract void Sort(int[] list);
}
/*选择排序
一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,
* 从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,
* 说明假设错误,否则交换min与i位置上数。
*/
public class ChoiceSort : SortStrategy
{
public override void Sort(int[] list)
{
int min;
for (int i = 0; i < list.Length; i++)
{
min = i;
for (int j = i + 1; j < list.Length; j++)
{
if (list[j] < list[min])
{
min = j;
}
}
int temp = list[min];
list[min] = list[i];
list[i] = temp;
}
}
}
/*插入排序
* 假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。
* 从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。
*/
public class InsertSort : SortStrategy
{
public override void Sort(int[] list)
{
//10,4,5,20,90
for (int i = 1; i < list.Length; i++)
{
int temp = list[i];
int j = i;
while (j > 0 && list[j - 1] < temp)
{
list[j] = list[j - 1];//将小的数放到后面
--j;
}
list[j] = temp;
}
}
}
//冒泡排序 两重循环 将最大的数放到前面
public class BubbleSort : SortStrategy
{
public override void Sort(int[] list)
{
for (int i = 0; i < list.Length; i++)
{
for (int j = i + 1; j < list.Length; j++)
{
if (list[j] > list[i])
{
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
}
}
}
public class Client
{
static void Main()
{
ChoiceSort s = new ChoiceSort();
int[] arr = {10,4,5,20,90 };
s.Sort(arr);
foreach (int i in arr)
{
Console.WriteLine(i.ToString()+"<br/>");
}
}
}