码迷,mamicode.com
首页 > 编程语言 > 详细

直接选择排序

时间:2015-10-12 12:54:19      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

我的代码执行环境:

操作系统:OS X Yosemite

python版本2.7.6

直接选择排序直接引用百度百科上的解释:

http://baike.baidu.com/link?url=jP69NxFra_BJmmtVirRT_wBmGYzXlGOCNjeAiJx34K4sxetFLCLIbJUScpRfT0QhVtcjEn8v7nAH2B6jxXdrXK

用我自己的话来形容:

  1. 有一堆无序的数在那排队,先在所有数里面找最小的数(这就是刚学编程的时候会写的一个寻找最小值的程序),把最小的那个数放到第一个位置上,那么原来第一个位置上的数就放到原本属于最小数那个位置上。

  2. 现在第一个位置我们就不用再管了,现在从剩下的这些数里再找一个最小的,放在第二个位置上,原来第二个位置上的数就放到这个最小数的位置上。

  3. 以此类推,直到剩下最后一个数的时候,那么一个有序的队列已经排好了。


下面来看一下C语言的实现:

#include <stdio.h>
#include <stdlib.h> //  rand(), srand()
#include <time.h>   //  time()

void select_sort(int *array, int len)
{
    int i = 0, j = 0, k = 0;
    int min = 0;

    for (i = 0; i < len - 1; i ++) {
        /* 查找最小值 */
        min = array[i];
        k = i;
        for (j = i + 1; j < len; j ++) {
            if (min > array[j]) {
                min = array[j];
                k = j;  //  记录最小值的下标位置
            }
        }
        /* 交换最小值的位置 */
        array[k] = array[i];
        array[i] = min;
    }
}

int main(int argc, char *argv[])
{
    int numbers[20];
    int i;

    /* 初始化随机数生成器,用当前时间当种子,
     * 如果不调用srand或者srand的参数是一个
     * 固定的值,那么每次执行都是同一组数据 */
    srand(time(NULL));

    for (i = 0; i < 20; i ++) {
        numbers[i] = rand() % 100 + 1;
    }

    for (i = 0; i < 20; i ++) {
        printf("numbers[%d] = %d\n", i, numbers[i]);
    }

    select_sort(numbers, 20);

    for (i = 0; i < 20; i ++) {
        printf("numbers[%d] = %d\n", i, numbers[i]);
    }

    return 0;
}

select_sort函数只是其中一种方法,并且还可以改进,这里min是直接存储的最小值,当然也可以用来记录最小值的下标,然后再进行数据交换。

C语言其实实现起来是比较复杂的了,如果是用高级语言就省去很多事情,下面是Python实现:

#coding:utf-8
#因为我用的是python2.7,所以上面加上了coding:uft-8,
#要不然中文注释会报错
import random

def select_sort(numbers):
    total = len(numbers)

    for i in range(0, total):
        #查找最小值下标
        min = i
        for j in range(i + 1, total):
            if numbers[min] > numbers[j]:
                min = j
        #交换最小值
        numbers[min], numbers[i] = numbers[i], numbers[min]

    return numbers


#生成列表
numbers = range(1, 20)
#打乱列表顺序
random.shuffle(numbers)
print numbers
print select_sort(numbers)






直接选择排序

标签:

原文地址:http://my.oschina.net/bxxfighting/blog/515786

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!