排序(二)之选择排序SelectSort

来源:互联网 发布:二次元音乐软件 编辑:程序博客网 时间:2024/06/10 12:27

一、选择排序的思想

       每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

       下面,看个例子吧:(这里举例从小到大排序)

       初始序列为:9    3    2    5    4    7    6    0    1     8

       第一次选择通过两两比较从这10个数中选出最小的与第一位交换

     

      第二次选择也利用上面的方法先选出2-10这9个数中最小的然后与第二位交换

        

      .........按上面的方法依次选择排序

      第九次选择后,我们就能得到最终的结果了:0     1      2     3     4     5      6       7      8      9

 

      总结一下上面的例子吧,(当有n个元素时)1.我们要经过n-1次选择才能排好 2.每次选择需要在剩下的序列里进行两两比较,选出最小的。

二、编程

      定义一个变量min,用来记录找到的最小值的下标,然后,每趟找完最小值之后,将最小值与相应位置的值作交换就可以了。

     下面看一下代码实现吧。(环境:vs2010   语言:c语言)

#include <stdio.h>#include <stdlib.h>void SelectSort(int* arr, int len){int i = 0;int j = 0;for(i = 0; i < len-1; i++)      //控制选择的趟数{int tmp;                int min = i;for(j = i+1; j < len; j++)  //控制每趟选择比较的次数{if(arr[min] > arr[j]){min = j;}}tmp = arr[i];arr[i] = arr[min];arr[min] = tmp;}}int main(){int i = 0;int array[10] = {9, 3, 2, 5, 4, 7, 6, 0, 1, 8};SelectSort(array, sizeof(array)/sizeof(int));for(i = 0; i < sizeof(array)/sizeof(int); i++){printf("%d ",array[i]);}printf("\n");system("pause");return 0;}


三、选择排序与冒泡排序的区别:

1.首先,选择排序是通过两两比较将最小(或最大)值标记出来,然后与前面相应位置进行交换;而冒泡排序是通过两两比较将不符合要求的交换使最大(或最小)值到后面。

2.选择排序优于冒泡排序的在于它交换数据次数少,先不急于调换位置,先从arr[0]开始逐个检查,看哪个数最小就记下该数所在的位置min,等一躺扫描完毕,再把arr[min]和arr[0]对调,这时arr[0]到arr[9]中最小的数据就换到了最前面的位置。

 

这个是冒泡排序的链接点击打开链接,有兴趣的童鞋可以点进去看一下哦!!

谢谢阅读,祝大家每天都开开心心哒  ^_^

1 0
原创粉丝点击