选择排序算法思想

选择排序的基本思想是:如果有N个元素需要排序,那么首先从N个元素中找到最小的那个元素与第0位置上的元素交换(说明一点,如果没有比原本在第0位置上的元素小的就不用交换了,后面的同样是),然后再从剩下的N-1个元素中找到最小的元素与第1位置上的元素交换,之后再从剩下的N-2个元素中找到最小的元素与第2位置上的元素交换,…….直到所有元素都排序好(也就是直到从剩下的2个元素中找到最小的元素与第N-2位置上的元素交换)。

注意,我们的排序有稳定和不稳定之分。稳定排序的意思是:比如原本一组无序的元素中出现两个相同的值,那么经过稳定排序后这两个相等的元素必然相邻,不改变原来无序状态下的先后顺序叫稳定的排序。(不懂我这样说明白了没有,下面给个例子)

那么不稳定排序就是,原本相等的元素之间的顺序经过不稳定的排序后顺序随机,有可能保持原来的,有可能是打乱的。

《选择排序算法思想》

那么下面我给出具体程序:

void SelectionSort(int a[], int size)
{
	for(int i = 0;i < size-1;i++){
	//每次循环后将第i小的元素放好 
		int tempMin = i;
	//记录第i个到底size-1个元素中,最小的元素的下标
		for(int j = i+1;j < size;j++){
			if(z[j] < a[tempMin])
				tempMin = j;		
		} 
	//下面将第i小的元素放在第i个位置上,并将原来第i个位置的元素挪到后面
		int tmp = a[i];
		a[i] = a[tempMin];
		a[tempMin] = tmp; 
	}
} 

下面分析时间复杂度:外重循环的循环体执行(size-1)次。对于每次外重循环体的执行,第7行內重循环中的j<size这个判断需要执行(size-i)次。由于i从0变到(size-2),因此j<size这个判断一共需要执行2+3+…+size次,即(size+1)*size/2-1次。因此该函数的时间复杂度就是
O(size^2)的。当然,也可以说第7行的j<size这个判断要执行(size+1)*size/2次,因此复杂度就是
O(size^2).

    原文作者:排序算法
    原文地址: https://blog.csdn.net/qq_41045071/article/details/81053250
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞