排序--选择排序(Selection Sort)

本文介绍了两种排序算法:直接选择排序和堆排序,并提供了详细的C#代码实现。直接选择排序通过每次选择最小元素放置在已排序序列末尾来完成排序;堆排序则利用完全二叉树的性质进行高效排序。

一.直接选择排序

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

转载于:https://www.cnblogs.com/wangqun/archive/2010/01/05/1639924.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值