c语言的一个和选择排序法有关的问题选择排序法为什么不能直接简化为下面这段程序?for(i=0;i
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/02 01:00:05
![c语言的一个和选择排序法有关的问题选择排序法为什么不能直接简化为下面这段程序?for(i=0;i](/uploads/image/z/3831523-43-3.jpg?t=c%E8%AF%AD%E8%A8%80%E7%9A%84%E4%B8%80%E4%B8%AA%E5%92%8C%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F%E6%B3%95%E6%9C%89%E5%85%B3%E7%9A%84%E9%97%AE%E9%A2%98%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F%E6%B3%95%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%8D%E8%83%BD%E7%9B%B4%E6%8E%A5%E7%AE%80%E5%8C%96%E4%B8%BA%E4%B8%8B%E9%9D%A2%E8%BF%99%E6%AE%B5%E7%A8%8B%E5%BA%8F%3Ffor%28i%3D0%3Bi)
c语言的一个和选择排序法有关的问题选择排序法为什么不能直接简化为下面这段程序?for(i=0;i
c语言的一个和选择排序法有关的问题
选择排序法为什么不能直接简化为下面这段程序?
for(i=0;i
c语言的一个和选择排序法有关的问题选择排序法为什么不能直接简化为下面这段程序?for(i=0;i
你给出这个排序算法也是选择排序,但你的这个选择排序性能相对较低,所以一般不用这个程序.网友Jack218338与NE_Z说它是冒泡都是错误的说法,冒泡排序中的交换数据,都是发生在相邻的两个数据之间出现逆序时进行,而选择排序未必,比如你给出的程序中交换数据就未必是发生在相邻的两个数据之间.常用的选择排序是对你的这个选择排序的改进,性能比你的这个要优的.提供冒泡与选择的几个版本,楼主你可以比较一下.
1、性能较低的冒泡
for(i = 0; i < n - 1; i++)
for(j = n; j > i; j--)
if(b[j - 1] > b[j]) Swap(b[j - 1], b[j]); /*交换都是发生在相邻的两个元素之间*/
2、性能较低的选择
for(i = 0; i < n - 1; i++)
for(j = i + 1; j < n; j++)
if(b[i] > b[j]) Swap(b[i], b[j]); /*b[i]与b[j]未必相邻*/
3、改进后的冒泡
for(i = 0; i < n - 1; i++) {
exchange = 0;
for(j = n; j > i; j--)
if(b[j - 1] > b[j]) {
Swap(b[j - 1], b[j]);
exchange = 1;
}
if(exchange == 0) break; /*如果某趟冒泡过程中没有发生交换操作,则排序结束*/
}
4、改进后的选择
for(i = 0; i < n - 1; i++) {
min = i;
for(j = i + 1; j < n; j++)
if(b[j] < b[min]) min = j;
if(i != min) Swap(b[i], b[min]); /*每趟只和最小元素进行交换*/
}
改进后的选择主要是为了减少数据交换的操作,从而提高排序效率.