标签:
我的代码执行环境:
操作系统: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