c语言的一个和选择排序法有关的问题选择排序法为什么不能直接简化为下面这段程序?for(i=0;i

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 02:23:32
c语言的一个和选择排序法有关的问题选择排序法为什么不能直接简化为下面这段程序?for(i=0;ic语言的一个和选择排序法有关的问题选择排序法为什么不能直接简化为下面这段程序?for(i=0;ic语言的

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]); /*每趟只和最小元素进行交换*/
}
改进后的选择主要是为了减少数据交换的操作,从而提高排序效率.

c语言的一个和选择排序法有关的问题选择排序法为什么不能直接简化为下面这段程序?for(i=0;i c语言的一题目:分别用冒泡法和选择法对10个数排序! 谁能编一个有关C语言选择语句的例子? C语言中选择法排序和冒泡法排序有什么区别 C语言中冒泡排序法和选择排序法有哪些不同 下列关于排序的说法正确的是( ).A.插入排序和冒泡排序都是稳定的排序算法.B.选择排序的平均时间复杂度为O(n2).C.选择排序、快速排序、希尔排序、堆排序都是不稳定的排序算法.D.希尔排 C语言编程——选择排序法,要求:由主函数调用排序子函数,对n个整数进行从小到大的排序,谢了 关于选择排序和堆排序为什么说选择排序中比较的次数与初始的顺序无关而堆排序与初始顺序有关? C语言用冒泡法和选择法对10个数进行排序 C语言 冒泡排序法和选择法的不同,本质区别不必写算法,讲清楚就行了,谢谢!还有思路上的不同哦 C语言:下面程序使用选择排序方法对20个整数进行排序,这20个数从键盘输入,并输出排序前和排序后的数据请问这个程序有什么问题.#includevoid main(){int i,j,k,a[10],temp;for(i=0;i 用选择法对10个整数从小到大排序(C语言中的题),其中的“选择法”是指的是什么?它的用选择法对10个整数从小到大排序(C语言中的题),其中的“选择法”是指的是什么?它的原理是什么?它与 写出选择排序法的过程 C语言选择结构问题 c程序中冒泡法排序,选择法排序,快速排序的比较,哪个有优势,区别在哪里? 用选择排序法对数列排序用选择排序法对数列(50,46,75,27,80,36,78)从大到小排序.大数排在第一位时.数列中数的排列顺序为( c语言——选择排序  给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1 以下排序算法最坏情况下时间复杂度最低的是 A.冒泡排序 B.插入 C.选择 D.快排