排序算法(五) 简单选择排序

来源:互联网 发布:培训交互设计师知乎 编辑:程序博客网 时间:2024/05/21 22:16
一、什么是选择类排序?
    顾名思义,选择类排序的核心就是“选择”,为什么选择呢?怎么样选择呢?
    选择类排序的基本思路就是:

    在待排序序列中选择一个最小(最大)的元素出来,并将之放到合适的位置上,最终将待排序序列变成一个有序的序列。

二、有哪些选择类的排序算法?

    根据选择元素的方式不同,我们讨论两种选择类排序算法:简单选择排序堆排序。其中简单选择排序是通过遍历待排序元素来选择得到一个待排元素,而堆排序是通过大根堆或小根堆堆出一个待排元素,两者效率差距较大。简单来说,堆排序比简单选择排序效率更高一些。但堆排序也比简单选择排序算法实现更复杂,本节只介绍简单选择排序,下节来说说堆排序!

三、理解简单选择排序:
   
四、源代码实现:
/***功能: 简单选择排序法升序排序一个序列**参数说明:**@record : 序列数组 @len : 序列长度**返回值: 无*/void SelectSort(int record[], int len){int i, j;int index;for (i = 0; i < len;i++){index = i;   //保存最小元素位置的下标//在待排序列中找到一个最小元素作为待排元素for (j = i + 1; j < len;j++){if (record[j] < record[index]){index = j;}}//如果找到的最小元素下标与i(待排位置下标)不相同,则执行交换。否则不用交换if (index != i){int temp = record[i];record[i] = record[index];record[index] = temp;}}}int main(void){int record[] = { 46,55,13,42,94,17,05,70 }; int len = sizeof(record) / sizeof(record[0]);int i = 0;printf("排序前: \n");for (i = 0;i < len;i++){printf("%d  ", record[i]);}puts("");SelectSort(record, len);printf("排序后: \n");for (i = 0;i < len;i++){printf("%d  ", record[i]);}puts("");return 0;}

运行截图:
               


 
原创粉丝点击