一.直接选择排序
直接选择排序的基本思想是:第一趟从所有的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);}}}
}