上一篇介绍了一下冒泡排序,其实冒泡算法做嵌套的两次循环,属于效率比较低但很稳定的排序法。可能真正用它来排序比较少哦,可是万物存在皆有道理。
昨日坐火车碰见一学通信的女生,天之骄子信心满满,可是想弃理从文。看来不仅仅婚姻是围城,我们每个人都深处围城之中。不过本博主一直都要朝围城里挤,眼看曙光即要出现……
好了,话说上回冒泡完之后,现在要选择排序又来了:
程序如下:
using System;
namespace MySort
{
//这个类上一篇冒泡排序时已经创建,现在为她新加一个选择排序的方法
public class SumSort
{
//选择排序方法:SelectionSort
public void SelectionSort(int[] list)
{
//先定义常用的变量,min里储存这组数里最小的数
int i, j, min, temp;
//数组还是从第一位开始
for (i = 0; i < list.Length – 1; i++)
{
//与冒泡排序相比,
//不同的是预先开辟了一个int变量min来储存数组的最小值
//并假设第一个数最小,把它的索引赋给min
min = i;
//从第二数开始遍历到数组结尾
for (j = i + 1; j < list.Length; j++)
{
//如果有比预存的最小数还要小的数的话
if (list[j] < list[min])
{
//那么就把这个数的数组索引赋给min
min = j;
}
//遍历完一遍后,那么min里存储的必然是最小数的索引
//倘若没有值比min里存的数还小的话,不做任何变化
}
//现在开始做数值交换了
//先把那个最小的数放在一个临时存储空间temp里
temp = list[min];
//然后把上一个以为是最小其实不是最小的数放在那个最小数的位置上
list[min] = list[i];
//最后把最小数放在刚才那个较大数的座位上
list[i] = temp;
//为什么要如此变化?
//因为排序是从数组的第一个数开始
//然后1,2,3……,每向后一位总是储存剩下数的最小数
}
}
}
public class test
{
//这里给一组测试数据,打印输出看看排序方法的效果如何
static void Main()
{
int[] arr = { 4, 2, 43, 5, 61, 89, 34, 67, 32, 40 };
//对于不想实例化得人来说可以把类定义为静态类
//但是根据有关面向对象的规则来讲,还是少一些静态类比较好
SumSort mysort = new SumSort();
mysort.SelectionSort(arr);
for (int i = 0; i < arr.Length; i++)
{
Console.Write(“第{0}位是:{1}/n”, i + 1, arr[i]);
}
Console.WriteLine();
}
}
}
PS:选择排序跟冒泡一样,都是效率比较低的排序法,一般都适用于10个以下的数。看程序好似冒泡排序的的变体,冒泡是两两做比较,选择排序是预先开辟一块内存储存一个值,然后后来的跟预存的比。冒泡好像是三个杯子盛水(前一个数、后一个数、一个置换数),选择排序就像四个杯子盛水(前一个数、后一个数、一个置换数、一个预存的最小数)。