【算法导论】选择排序法

简介: 选择排序法         选择排序其实是冒泡法的一种改进,其基本思路也是:先确定最小元素,再找次最小元素,最后确定最大元素。         它与冒泡排序的最大区别在于:冒泡排序是只要碰见比它大的元素就交换,而选择排序是直接将元素放在最终的确定位置,从而避免了多次交换过程。

选择排序法

         选择排序其实是冒泡法的一种改进, 其基本思路也是:先确定最小元素,再找次最小元素,最后确定最大元素。
        它与冒泡排序的 最大区别在于:冒泡排序是只要碰见比它大的元素就交换,而选择排序是直接将元素放在最终的确定位置,从而避免了多次交换过程。
         举例说明:数组a[5]={3,4,2,5,1}.通过一轮比较知1应当放在数组a[0]上。所以我们可以直接将a[0]与a[4]进行交换,从而避免了a[4]在比较过程中与其它元素的交换。在中间比较时,不需要记录值,只需要记住索引就可找到元素。
   具体程序如下:
#include<stdio.h>
void SelectSort(int* arrayA,int n);

void main()
{
	int arrayA[]={4,2,3,6,3,8,5};
	int n=sizeof(arrayA)/sizeof(int);
	SelectSort(arrayA,n);
	
	for(int i=0;i<n;i++)
		printf("%d ",arrayA[i]);
	printf("\n");
}

void SelectSort(int* arrayA,int n)
{
	for(int i=0;i<n-1;i++)
	{
		int index=i;
		for(int j=i+1;j<n;j++)//注意j从i+1开始,因为前面的元素已经排好了
		{
			if(arrayA[j]<arrayA[index])
				index=j;//只需要记录索引值
		}

		//如果当前最小数据索引不是i,也就是说排在i位置的数据在index处
        if (index!=i)        
        {
            //交换数据,确定i位置的数据。
            int temp = arrayA[i];
            arrayA[i] = arrayA[index];
            arrayA[index] = temp;
        }
	}
}

注意:我是在vs2008上运行的,与vc 6.0有点区别,主要是循环体中的循环变量的作用域,出错体现在循环变量的重复定义上。例如:在vs2008或vs2010上,程序为:

#include<stdio.h>
void main()
{
int i=0;
for(int i=0;i<5;i++)
printf("%d ",i);
}

则在VC 6.0上需改为:

#include<stdio.h>
void main()
{
int i=0;
for(i=0;i<5;i++)
printf("%d ",i);
} 


原文:http://blog.csdn.net/tengweitw/article/details/9707801

作者:nineheadedbird



目录
相关文章
|
2月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
18 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
2月前
|
搜索推荐 Java Go
深入了解选择排序算法
深入了解选择排序算法
25 4
|
2月前
|
搜索推荐 算法
【排序算法(一)】——插入排序,选择排序 —> 深层解析
【排序算法(一)】——插入排序,选择排序 —> 深层解析
|
2月前
|
算法 Python
Python算法编程:冒泡排序、选择排序、快速排序
Python算法编程:冒泡排序、选择排序、快速排序
|
4月前
|
搜索推荐 算法 Java
经典排序算法之-----选择排序(Java实现)
这篇文章通过Java代码示例详细解释了选择排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过选择排序对数组进行升序排列。
经典排序算法之-----选择排序(Java实现)
|
6月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
6月前
|
搜索推荐
排序算法---选择排序-----详解&&代码
排序算法---选择排序-----详解&&代码
|
6月前
|
算法 搜索推荐
数据结构与算法-选择排序
数据结构与算法-选择排序
32 4
|
6月前
|
搜索推荐 算法
【C/排序算法】:堆排序和选择排序
【C/排序算法】:堆排序和选择排序
35 0
|
6月前
|
算法 搜索推荐 Java
JavaSE——算法(1/2):认识、冒泡排序、选择排序及优化(介绍、详细图解、代码)
JavaSE——算法(1/2):认识、冒泡排序、选择排序及优化(介绍、详细图解、代码)
38 0