关闭

排序(二)之选择排序SelectSort

标签: 选择排序冒泡排序区别思想c语言
170人阅读 评论(0) 收藏 举报
分类:

一、选择排序的思想

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

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

       初始序列为: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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:24325次
    • 积分:566
    • 等级:
    • 排名:千里之外
    • 原创:49篇
    • 转载:1篇
    • 译文:0篇
    • 评论:5条
    博客专栏
    文章分类
    最新评论