• 数据结构_选择排序


    选择排序介绍

    选择排序(Selection sort)是一种简单直观的排序算法。
    它的基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

     总结:两个for循环=一个for喜欢i=0-(n-1)+一个for循环寻找比i小的数组的坐标用min存起来+一个交换的过程

    /*
     *  设置一个参考存储坐标,和冒泡的区别是不需要频繁的移动交换,它只需要找坐标存起来就可以啦
     */
    #include"stdio.h"
    
    /*
     * 选择排序
     *
     * 参数说明:
     *     a -- 待排序的数组
     *     n -- 数组的长度
     */
    void select_sort(int a[], int n)
    {
        int i;        // 有序区的末尾位置
        int j;        // 无序区的起始位置
        int min;    // 无序区中最小元素位置
        for(i=0;i<n;i++)
        {
            int flag=1;
            min=i;            //设置一个参考存储坐标,和冒泡的区别是不需要频繁的移动
            for(j=i+1;j<n;j++) //不就开始冒泡了,但是也不用冒泡,那怎么找最小呢?
            {
                if(a[j]<a[min])
                    min=j;//就这样一层循环找到无序区最小的a[j]存到min中
                flag=0;
            }
            if(!flag)   //若上面出现比i更小的就交换,没有就不用交换
            {
                int temp=a[min]; //交换a[i]和a[min]
                a[min]=a[i];  //
                a[i]=temp;
            }   
        }
    }
    void main(void)
    {
        int a[]={5,9,14,2,7,84,36,3,16,12,10};
        int length=sizeof(a)/(sizeof(a[0]));
        printf("排序前:");
        for(int i=0;i<length;i++)
            printf("%d ",a[i]);
        printf("
    ");
    
        select_sort(a,length);
    
        printf("选择排序后:");
        for(int i=0;i<length;i++)
            printf("%d ",a[i]);
        printf("
    ");
    }

  • 相关阅读:
    ajax请求传参数复杂对象list,后端springmvc接收参数
    SpringBoot热部署简介
    lucene 初探
    学生管理系统导包
    tomcat加入系统服务+开机自启
    sql like模糊查询的条件拼接
    SSHDemo
    Spring在web开发中的应用
    Spring的Bean内部方法调用无法使用AOP切面(CacheAble注解失效)
    dwz tree组件 取得所选择的值
  • 原文地址:https://www.cnblogs.com/snowwhite/p/4720475.html
Copyright © 2020-2023  润新知