设为首页 加入收藏

TOP

经典排序算法 - 选择排序Selection sort
2015-07-16 12:55:08 来源: 作者: 【 】 浏览:2
Tags:经典 排序 算法 选择 Selection sort

经典排序算法 - 选择排序Selection sort


顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来,顺序放入新数组,直到全部拿完再简单点,对着一群数组说,你们谁最小出列,站到最后边


然后继续对剩余的无序数组说,你们谁最小出列,站到最后边


再继续刚才的操作,一直到最后一个,继续站到最后边,现在数组有序了,从小到大


举例


先说看每步的状态变化,后边介绍细节,现有无序数组[6 2 4 1 5 9]


第一趟找到最小数1,放到最前边(与首位数字交换)


交换前:| 6 | 2 | 4 | 1 | 5 | 9 |


交换后:| 1 | 2 | 4 | 6 | 5 | 9 |


第二趟找到余下数字[2 4 6 5 9]里的最小数2,与当前数组的首位数字进行交换,实际没有交换,本来就在首位


交换前:| 1 | 2 | 4 | 6 | 5 | 9 |


交换后:| 1 | 2 | 4 | 6 | 5 | 9 |


第三趟继续找到剩余[4 6 5 9]数字里的最小数4,实际没有交换,4待首位置无须交换


第四趟从剩余的[6 5 9]里找到最小数5,与首位数字6交换位置


交换前:| 1 | 2 | 4 | 6 | 5 | 9 |


交换后:| 1 | 2 | 4 | 5 | 6 | 9 |


第五趟从剩余的[6 9]里找到最小数6,发现它待在正确的位置,没有交换


排序完毕输出正确结果[1 2 4 5 6 9]


第一趟找到最小数1的细节


当前数组是| 6 | 2 | 4 | 1 | 5 | 9 |


先把6取出来,让它扮演最小数


当前最小数6与其它数一一进行比较,发现更小数就交换角色


当前最小数6与2比较,发现更小数,交换角色,此时最小数是2,接下来2与剩余数字比较


当前最小数2与4比较,不动


当前最小数2与1比较,发现更小数,交换角色,此时最小数是1,接下来1与剩余数字比较


当前最小数1与5比较,不动


当前最小数1与9比较,不动,到达末尾


当前最小数1与当前首位数字进行位置交换,如下所示


交换前:| 6 | 2 | 4 | 1 | 5 | 9 |


交换后:| 1 | 2 | 4 | 6 | 5 | 9 |


完成一趟排序,其余步骤类似


代码仅供参考


static void selection_sort(int[] unsorted)
? ? ? ? {
? ? ? ? ? ? for (int i = 0; i < unsorted.Length; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? int min = unsorted[i], min_index = i;
? ? ? ? ? ? ? ? for (int j = i; j < unsorted.Length; j++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (unsorted[j] < min)
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? min = unsorted[j];
? ? ? ? ? ? ? ? ? ? ? ? min_index = j;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (min_index != i)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? int temp = unsorted[i];
? ? ? ? ? ? ? ? ? ? unsorted[i] = unsorted[min_index];
? ? ? ? ? ? ? ? ? ? unsorted[min_index] = temp;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }


? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? int[] x = { 6, 2, 4, 1, 5, 9 };
? ? ? ? ? ? selection_sort(x);
? ? ? ? ? ? foreach (var item in x)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Console.WriteLine(item);
? ? ? ? ? ? }
? ? ? ? ? ? Console.ReadLine();
? ? ? ? }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇开源微内核seL4 microkernel 下一篇Singleton单例模式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: