选择排序算法(3)

目录

 

选择排序算法原理

选择排序算法的场景

选择排序算法的实现

选择排序的运行结果


  • 选择排序算法原理

      选择排序就是重复“从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换”这一操作的算法。在序列中寻找最小值时使用的是线性查找。选择排序使用了线性查找来寻找最小值,因此在第1轮中需要比较n-1个数字,第2轮需要比较n-2个数字……到第n-1轮的时候就只需比较1个数字了。因此,总的比较次数与冒泡排序的相同,都是(n-1)+(n-2)+…+1≈n2/2次。每轮中交换数字的次数最多为1次。如果输入数据就是按从小到大的顺序排列的,便不需要进行任何交换。选择排序的时间复杂度也和冒泡排序的一样,都为O(n2)

  • 选择排序算法的场景

 

  • 选择排序算法的实现

//描述:选择排序算法
//参数:@piArray 待排序的数组数据
//		@iNum 数组个数
//返回:无
void SelectSort(int *piArray, int iNum)
{
	int i, j, idx, tmp;
	char info[128];


	Printf("Sort before:", piArray, iNum);
	printf("\n\n");
	for (i=0; i<iNum-1; i++)
	{
		idx = i;
		for (j=i+1; j<iNum; j++)
		{
			if (piArray[j] > piArray[idx]) //寻找最小值
				idx = j;
		}
		tmp = piArray[i];
		piArray[i] = piArray[idx];
		piArray[idx] = tmp;

		memset(info, 0, sizeof(info));
		sprintf(info, "\nOrder number %02d:", i);
		Printf(info, piArray, iNum);
	}
	

	printf("\n\n");
	Printf("Sort after:", piArray, iNum);
}

int main(int argc, char *argv[])
{
	int iArray[] ={10, 23, 65, -101, 999, 10000};

	SelectSort(iArray, sizeof(iArray)/sizeof(iArray[0]));

	system("pause");
	return 0;
}
  • 选择排序的运行结果

选择排序算法(3)
标题