选择排序的思想,n个数据存在数组a[0]到a[n-1],然后一个一个排列。先考虑第一个数,存于a[0],需从a[0]到a[n-1]选择出最小的一个数,然后存放于a[0]处,然后考虑第二个数,从a[1]到a[n-1]中找到最小的数,存到a[1],…,直到第n-1个数。可以和冒泡排序的思想相比较,冒泡是通过相邻的两个数据比较,每次循环最终将最大的数排在了最后面,而选择排序是每次选择最小的数,然后排在最前面,由此可以当作一个另类冒泡算法。当然还有一种思路就是每次先定位出最小的数,然后再做替换的操作。以下给出两种写法
C#代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BubbleSort
{
class Program
{
static void Main(string[] args)
{
int[] arr = {13,15,1,5,3,55,2,8,15,6,8,19,4,7,11};
SelectSort1(arr);
}
#region 选择排序
public static void SelectSort(int[] arr)
{
int len = arr.Length;
int temp, k;
for (int i = 0; i < len - 1; i++)
{
k = i;
for (int j = i + 1; j < len; j++)
{
if (arr[j] < arr[k])
{
k = j;
}
}
if (i != k)
{
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
Console.WriteLine("选择排序后的顺序:" + string.Join(",", arr));
Console.ReadLine();
}
public static void SelectSort1(int[] arr)
{
int len = arr.Length;
int temp;
for (int i = len - 1; i >= 0; i--)
{
for (int j = len-1; j > len-i-1; j--)
{
if (arr[j] < arr[j - 1])
{
temp = arr[j-1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}
Console.WriteLine("选择排序后的顺序:" + string.Join(",", arr));
Console.ReadLine();
}
#endregion
}
}
运行结果
若有错误,请指正