数据结构_选择排序

选择排序介绍

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

原文地址:https://www.cnblogs.com/snowwhite/p/4720475.html