马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
选择排序是基本排序思想的一种,简单点说是:第 i 次排序从序列的后n - i + 1个元素中选择一个最小的元素,与该
n - i + 1个元素的最前面那个元素进行位置交换。
直观来说就是:每次的排序都是从未排好的序列中选择一个最小的元素,与未排序的元素的第一个进行交换。
用图来解释下:
3 6 4 2 11 10 进行排序
第一次
由于整个序列都是未排序的 所以,
选出最小的元素 “2” 6 4 3 11 10
第二次 在后续的为排序的元素
中选出最小的元素 “2 3” 4 6 11 10
同理进行若干次,直到最后结果
“2 3 4 6 11 10 ”
对于选择排序来说,包含 n 个元素的数据序列 需要 n - 1 次的排序
这就是基本的原理啦。#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
int *init_S_Sort(int size)
{
return (int *)malloc(sizeof(int) * size);
}
void selection_sort(int *size, int length)
{
int min, loop, loop_in, temp;
for(loop = 0; loop < length; loop++)
{
min = loop;
for(loop_in = loop + 1; loop_in < length; loop_in ++ )
{
if(size[min] > size[loop_in])
min = loop_in;
}
temp = size[loop];
size[loop] = size[min];
size[min] = temp;
}
}
int main(void)
{
int len, len_buf, len_print, *arrary, *arrary_buf, *arrary_print;
printf("The Length of Arrary:");
scanf("%d",&len);
len_print = len_buf = len;
arrary = arrary_buf = arrary_print =init_S_Sort( len );
printf("The Elemments Of Arrary:");
while( len-- )
{
scanf("%d",arrary++);
}
selection_sort(arrary_buf, len_buf);
while( len_print --)
{
printf("%d ",*arrary_print++);
}
return 0;
}
在VC6.0下测试通过,代码实现了预期的功能,但细节处理的还是不够好,主函数过于繁琐,希望大家给出改正建议,多交流。 |