七种排序------简单选择排序(Simple Selection Sort)

简单选择排序法就是通过 n - i 次关键字间的比较,从 n - i + 1个记录中选出关键字最小的记录,并和第 i 个记录交换。

代码如下:

void SelectSort(SqList *L)
{
	int i,j,min,k;
	for(i = 0;i<(L->length-1);i++)
	{
		min = i;                            //将当前下标设置为最小值下标
		for(j = i+1;j < (L->length);j++);
		{
			if((L->r[min]) > (L->r[j]))     //如果有小于当前最小值的关键字
			    min = j;                    //将次关键字的下标赋值给min
		}
		if(i != min)                        //若min != i ,说明找到最小值,进行交换
			swap(L,i,min);                  
	}
}

代码应该说不难理解,针对待排序的关键字序列为{9,1,5,8,3,7,4,6,2};对 i 从0循环到7,当i = 0时,L.r[i] = 9,min开始为0,然后与   j = 2到9比较L.r[min]与L.r[j]的值,因为j = 2时最小,所以min = 2,最终交换了L.r[0]和L.r[1]的值,这里虽然比较了8次,但数据只交换了一次。

当 i = 1 时,L.r[i] = 9,min 开始是1,经过比较后,min = 9,交换L.r[1]和L.r[min]的值,这样就找到了第二位置的关键字,之后数据的比较与交换与上面完全相同,最多完成8次交换即可完成排序工作。

简单选择排序的复杂度:

对于交换次数而言,当最好的时候,交换为0次,最差的时候交换为n - 1次。对于比较次数而言为(n*(n - 1)/2),由于最终的排序时间是比较与jioa交换次数的总和,因此总的总的时间复杂度为O(n*n).

发布了26 篇原创文章 · 获赞 21 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章