|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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下测试通过,代码实现了预期的功能,但细节处理的还是不够好,主函数过于繁琐,希望大家给出改正建议,多交流。 |
|