zoukankan      html  css  js  c++  java
  • 【经典算法】直接选择排序

    直接选择排序

    数组分成有序区和无序区,初始时整个数组都是无序区,然后每次从无序区选一个最小的元素直接放到有序区的最后,直到整个数组变有序区。

    选择排序的步骤是这样的:

    首先,找到数组中最小的元素,将它和数组的第一个元素交换位置。

    第二步,在剩下的元素中继续寻找最小的元素,和数组的第二个元素交换位置。

    如此循环,直到整个数组排序完成。

    #include <stdio.h>
    
        int main () {
        int list[15] = {5,23,86,21,43,67,45,34,58,23,102,123,11,22,1};
        int i, j, temp,min;
        for(i = 0; i< 15;i++)
        {
            //令最小值等于无序区的第一个值
            min = list[i];
            temp = i;
            //找到无序区的最小值
            for(j = i; j<15;j++)
            {
                if(min>list[j])
                {   
                    temp = j;
                    min = list[j];
                }
                
            }
            //交换
            list[temp] = list[i];
            list[i] = min;
            temp = 0;
            
        }
        for (i = 0;i < 15; i++)
            printf("%d
    ",list[i]);
    }

    图解选择排序

    我们以[ 8,2,5,9,7 ]这组数字做例子。

    第一次选择,先找到数组中最小的数字 2 ,然后和第一个数字交换位置。(如果第一个数字就是最小值,那么自己和自己交换位置,也可以不做处理,就是一个 if 的事情)

    第二次选择,由于数组第一个位置已经是有序的,所以只需要查找剩余位置,找到其中最小的数字5,然后和数组第二个位置的元素交换。

    第三次选择,找到最小值 7 ,和第三个位置的元素交换位置。

    第四次选择,找到最小值8,和第四个位置的元素交换位置。

    最后一个到达了数组末尾,没有可对比的元素,结束选择。

    如此整个数组就排序完成了。

    参考:https://mp.weixin.qq.com/s/D0-lOLFkfppTnvN9yK_lBg

  • 相关阅读:
    Visual C#常用函数和方法集汇总
    基于窗体的/Cookie 身份验证示例
    ASP.NET状态存储管理九大兵器之六(缓存)
    ASP.NET中TreeView控件使用
    用.net操作word
    Array排序函数
    用C#制作PDF文件全攻略
    TreeView IE Web 控件的使用(很直观)
    windows共享与权限问题(总结)
    RndNum 生成随机字符串,包含数字和小写字母
  • 原文地址:https://www.cnblogs.com/-wenli/p/12117018.html
Copyright © 2011-2022 走看看