一.直接选择排序
直接选择排序的基本思想是:第一趟从所有的n个记录中选取最小的记录放在第一位,第二趟从n-1个记录中选取最小的记录放在第二位,以此类推,经过n-1趟排序后,整个序列就成为有序序列了
using System;
namespace StraightSelectSort
{
/// <summary>
/// 快速选择排序
/// </summary>
class Program
{
public static void Main(string[] args)
{
int[] array={3,6,5,9,7,1,8,2,4};
//用K记录一趟排序过程中最小值的索引
int k,temp;
for(int i=0;i<array.Length;i++)
{
k=i;
for(int j=i+1;j<array.Length;j++)
{
//始终保持K为一趟排序中最小值索引
if(array[j]<array[k])
{
k=j;
}
}
//把小元素依次放在左边
if(i!=k)
{
temp=array[i];
array[i]=array[k];
array[k]=temp;
}
}
//打印元素
foreach(int i in array)
{
Console.Write(i+" ");
}
Console.ReadKey(true);
}
}
}
二.堆排序(Heap Sort)
代码如下:
using System;
namespace SelectionSort
{
class Program
{
public static void Main(string[] args)
{
int[]R={3,5,7,9,1,8,2};
HeapSort(R);
foreach(int i in R)
{
Console.Write(i+" ");
}
Console.ReadKey(true);
}
public static void Sift(int[] R,int low,int high)
{
int i=low,j=2*i+1;
int temp=R[i];
while(j<=high)
{
if(j<high&&R[j]<R[j+1])
{
j++;
}
if(temp<R[j])
{
R[i]=R[j];
i=j;
j=2*i+1;
}
else
{
break;
}
}
R[i]=temp;
}
public static void HeapSort(int[] R)
{
int n=R.Length;
for(int i=n/2-1;i>=0;i--)
{
Sift(R,i,n-1);
}
for(int i=n-1;i>=1;i--)
{
int temp=R[0];
R[0]=R[i];
R[i]=temp;
Sift(R,0,i-1);
}
}
}
}