zoukankan      html  css  js  c++  java
  • 基础算法之选择排序Selection Sort

    原理

    首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。一种简单直观的排序算法。

    例子

    将数组[3,6,4,2,5,1]进行从大到小排序

    排序步骤:

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

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

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

    第二趟找到剩余[6,4,2,5,3]数字里的最小数2,与当前数组的首位数字进行交换

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

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

    第三趟找到剩余[4,6,5,3]数字里的最小数3,与当前数组的首位数字进行交换

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

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

    第四趟找到剩余[6,5,4]数字里的最小数4,与当前数组的首位数字进行交换

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

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

    第五趟找到剩余[5,6]数字里的最小数5,本来就在首位,无须交换

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

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

    至此,排序完毕,输出最终结果1 2 3 4 5 6

    动画演示

    代码参考

            static void Main(string[] args)
            {
                int[] intArray = { 3, 6, 4, 2, 5, 1 };
                Selection_Sort(intArray);
    
                foreach (var item in intArray)
                {
                    Console.WriteLine(item);
                }
                Console.ReadLine();
            }
    
            static void Selection_Sort(int[] unsorted)
            {
                int min, temp;
                for (int i = 0; i < unsorted.Length - 1; i++)
                {
                    min = i;
    
                    // 取得当前数组最小值的位置
                    for (int j = i + 1; j < unsorted.Length; j++)
                    {
                        if (unsorted[min] > unsorted[j])
                        {
                            min = j;
                        }
                    }
    
                    if (min != i)
                    {
                        temp = unsorted[i];
                        unsorted[i] = unsorted[min];
                        unsorted[min] = temp;
                    }
                }
            }

    参考资料

    维基百科http://en.wikipedia.org/wiki/Selection_sort

  • 相关阅读:
    前端开发浏览器兼容问题
    pc端页面打包成安卓apk
    AJAX
    webpack
    【javascript】数据结构-集合
    【javascript】数据结构-队列
    【前端】display: box布局教程 [转]
    【前端】Flex 布局教程:语法篇 [转]
    【前端】几种实现水平垂直居中的方法总结
    【前端】jQuery选择器$()的实现原理
  • 原文地址:https://www.cnblogs.com/jackbase/p/4275395.html
Copyright © 2011-2022 走看看