首页 > 学院 > 开发设计 > 正文

查找与排序03,选择排序

2019-11-17 03:00:29
字体:
来源:转载
供稿:网友

查找与排序03,选择排序

选择排序是一种低效的排序算法,大致过程是:遍历数组的每一个元素,先假设0号位置上的元素是最小的,并把0号索引赋值给一个表示最小元素索引的变量,比如说是smallest,再遍历0号位置以后的元素,一旦发现有比0号位置元素更小的元素,就把该元素的索引赋值给smallest,继续遍历,最终把0号位置以后最小元素的索引赋值给了smallest变量,再把0号位置和smallest位置上的元素互换,这样,在0号位置上放上了最小元素。接着,在1号位置放上倒数第二小的元素,在2号位置放上倒数第三小的元素......以此类推,最终得到一个升序排列的数组。由于是依次循环遍历数组元素,个人更愿意把选择排序理解成线性排序。

自定义一个类,里面维护着一个int[]类型数组,通过构造函数定义数组长度并初始化,并提供了打印和选择排序的相关方法。

   public class MyArray
    {
        PRivate static int[] arr;
        private static Random r = new Random();
        public MyArray(int size)
        {
            arr = new int[size];
            for (int i = 0; i < size; i++)
            {
                arr[i] = r.Next(1, 100);
            }
        }
        //选择排序算法
        public void Sort()
        {
            int smallest; //最小元素的索引 
            //最后一个索引位置不需要遍历,因为在代码段的内部循环中包含了对最后一个索引位置的处理
            for (int i = 0; i < arr.Length - 1; i++)
            {
                //把当前遍历的元素的索引赋值给smallest,即假设当前遍历的数组元素为最小元素
                smallest = i;
                //遍历当前遍历元素后面的所有元素
                //获取最小元素的索引
                for (int index = i + 1; index < arr.Length; index++)
                {
                    if (arr[index] < arr[smallest])
                    {
                        smallest = index;
                    }
                }
                //把当前遍历元素和最小元素交换位置
                Swap(i, smallest);
                //每次排完序打印
                Print();
            }
        }
        //交换2个位置上的元素
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表