排序(二)之选择排序SelectSort

原创 2016年06月01日 18:59:20

一、选择排序的思想

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

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

       初始序列为: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]中最小的数据就换到了最前面的位置。

 

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

选择排序(SelectSort)

选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序与冒泡排序非常的相似,都是一层层筑顶...

选择排序(selectSort.cpp)

选择排序1:selectSort1.cpp 【题目描述】 给定整数n(待排序整数的个数)和k(选择排序的趟数)、以及n个待排序的整数,要求从小到大进行k趟选择排序,并输出第k趟选择排序后的结果,各...

SelectSort 选择排序

InsertSort 插入排序算法: 总的时间复杂度为O(n^2) 思路是,外循环先遍历第一个数至倒数第二个,设置最小的那个数的索引,内循环为从i+1开始遍历到最后一个,找出有没有比当前最小数索引小的...

选择排序:selectSort

特点:内循环结束一次,最值出现在头角标上。 int[] a={2,3,1,4} 角标:0 1 2 3 元素:2 3 1 4 角标为0的和角标为1、2、3的分别比较, 角标为0的数(...

选择排序(SelectSort)

/*选择排序(SelectSort) *从当前未排序的整数中找一个最小的整数, *将它放在已排序的整数列表的最后。 *要点:选择排序选最小的,往左边选。 *选择排序(只在最后进行一次交换)...
  • LYKXHTP
  • LYKXHTP
  • 2017年02月26日 18:30
  • 105

选择排序(Selectsort)之Java实现

选择排序算法介绍 选择排序与冒泡排序非常的相似,都是一层层筑顶的过程,不同点在于冒泡排序会频繁的互换位置,而选择排序只是记录最大元素的位置,并与顶互换,只需交换一次。所以选择排序与冒泡排序相比时间常...

C++、C#、java算法学习日记02----选择排序(SelectSort)

直接选择排序属于排序算法的一种,他的排序速度要比冒泡排序快一些,算是对冒泡排序的一种改进。 基本思想:      直接排序的思想类似于我们实际生活中的排序行为,比如:对一串数字 63,4,24,1...
  • HC666
  • HC666
  • 2015年10月29日 14:11
  • 1320

【项目3 - 体验复杂度之一 复杂度为O(n 2 )的选择排序selectsort】

排序是计算机科学中的一个基本问题,产生了很多种适合不同情况下适用的算法,也一直作为算法研究的热点。本文章提供第一种排序算法,复杂度为O(n^2 )的选择排序函数selectsort writer:徐...

选择排序-selectsort

选择排序-selectsort

排序算法-SelectSort-选择排序

1. 选择排序算法介绍每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法。时间负责度为O(n^2)。2. 算...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序(二)之选择排序SelectSort
举报原因:
原因补充:

(最多只允许输入30个字)