zoukankan      html  css  js  c++  java
  • 数据结构_选择排序

    选择排序介绍

    选择排序(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("
    ");
    }

  • 相关阅读:
    python编程设计模式之接口类和抽象类
    python进阶之面向对象初识
    python进阶之异常处理
    python模块之包
    python模块之序列化模块
    python基础二 ---类型转换 ,字符串,列表,元祖,for,range,enumerate
    python基础一
    TCP协议的三次握手
    随机数Math.random()
    Vue.js内部响应式原理探究
  • 原文地址:https://www.cnblogs.com/snowwhite/p/4720475.html
Copyright © 2011-2022 走看看