标签:
我的代码执行环境:
操作系统:OS X Yosemite
python版本2.7.6
直接选择排序直接引用百度百科上的解释:
用我自己的话来形容:
有一堆无序的数在那排队,先在所有数里面找最小的数(这就是刚学编程的时候会写的一个寻找最小值的程序),把最小的那个数放到第一个位置上,那么原来第一个位置上的数就放到原本属于最小数那个位置上。
现在第一个位置我们就不用再管了,现在从剩下的这些数里再找一个最小的,放在第二个位置上,原来第二个位置上的数就放到这个最小数的位置上。
以此类推,直到剩下最后一个数的时候,那么一个有序的队列已经排好了。
下面来看一下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