选择排序C++

/*
 * selection_sort.cpp
 *
 *  Created on: 2016-3-17
 *      Author: LvLang
 */

//选择排序C++实现
#include <iostream>
using namespace std;

void swap(int *array,int i,int j)
{
	int temp = array[i];
	array[i] = array[j];
	array[j] = temp;
}

/*选择排序解释:
核心思想就是把最大的/最小的选择出来放到最前面,然后在选择出第二大/第二小的放到第二位,以此类推
注意区别于冒泡排序的两两比较自动得出最大的在最后面。
快捷键tips:选定代码按tab键可以凸出代码,按shift+tab键可以凹进代码*/

void selection_sort(int *array,int len)
{
	int i,j;
	for(i = 0;i <= len-2;i++)
	{
		int max_index = i;
		for(j = i+1;j <= len-1;j++)
		{
			if(array[j] > array[i])
			{
				max_index = j;
			}
		}
		if(max_index != i)
			swap(array,i,max_index);
	}
}

void print(int *array,int len)
{
	for(int i=0;i <= len-2;i++)
		cout<<array[i]<<" ";
	cout<<array[len-1]<<endl;
}

int main()
{
	int len;
	cin>>len;
	int *array = new int[len];
	for(int i=0;i<len;i++)
	{
		cin>>array[i];
	}
	cout<<"排序之前数组:"<<endl;
	print(array,len);
	selection_sort(array,len);
	cout<<"排序之后数组:"<<endl;
	print(array,len);

	return 0;
}







运行结果:



排序稳定性分析:

首先得知道什么是稳定性,也就是说如果序列存在两个相同的元素时,排序之后不改变它们的先后顺序,那么就是稳定的,否则就是不稳定的。

这里的选择排序因为是从最前往最后遍历的,并且代码中是要有大于当前最大(而不是等于)才交换,所以选择排序是稳定的。但是如果代码中等于当前最大就交换的话,那就是不稳定的。所以还得看具体的代码实现方式是怎样的。

改进:还有一种改进版的选择排序就是,选择最大元素的同时,把最小的也选出来,这样的话可以减少循环的次数,提高效率。


你可能感兴趣的:(选择排序C++)