将数组{3,7,1,6,2,4,8,5}中的元素从大到小的顺序排列,每次可以任意交换两个元素,求最少的交换次数.请写出具体的交换过程

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 15:31:18

将数组{3,7,1,6,2,4,8,5}中的元素从大到小的顺序排列,每次可以任意交换两个元素,求最少的交换次数.请写出具体的交换过程
将数组{3,7,1,6,2,4,8,5}中的元素从大到小的顺序排列,每次可以任意交换两个元素,求最少的交换次数.
请写出具体的交换过程

将数组{3,7,1,6,2,4,8,5}中的元素从大到小的顺序排列,每次可以任意交换两个元素,求最少的交换次数.请写出具体的交换过程
最少交换次数肯定是与8 7 6 5 4 3 2 1 不对应的数的个数再减可以形成的环的个数(因为每个环的最后一个数都不用排序的,前面都排好了,最后一个自然就序),此数组有两个环,所以是5次.
hint:环指的是例如上面数组中的1 6 5三个数虽然都不在自己应该在的位置,但他们占据了排好序后1,6,5应该占据的位置,所以可以抽象成一个环,环内换顺序就行了.同样3,2,4,8也是一个环,还有,对应好的7也可以看做是一个环,所以是8-1-1-1=5
交换过程有很多:
eg:
交换3 8 变成8 7 1 6 2 4 3 5
交换1 6 变成8 7 6 1 2 4 3 5
交换1 5 变成8 7 6 5 2 4 3 1
交换2 4 变成8 7 6 5 4 2 3 1
交换2 3 变成8 7 6 5 4 3 2 1
注意是环内交换

C++中,定义一个整型数组a[10]={1,2,3,4,5,6,7,8,9,10},编写一个函数实现将a数组各个数组元素的值加2.以数组元素作函数参数 有一个一维整形数组,元素为{0,1,2,3,4,5,6,7,8,9},将该数组中所有元素对称交换,交换后结果应为{9,8,7,6,有一个一维整形数组,元素为{0,1,2,3,4,5,6,7,8,9},将该数组中所有元素对称交换,交换后结果 用冒泡排序法将数组a[10]={1,3,2,5,6,7,4,9,10,8}中的数进行从大到小进行排列,并输出排好的数组a[10]请将该程序打出发布 数组中查数描述:输入10个互异的整数,并将它们存入数组中,再从键盘输入一个数,然后在该数组中查找该数,如果找到,输出对应的数组下标,否则,输出“Not Found”.样例输入:1 2 3 4 5 6 7 8 9 1051 6 7 8 定义一个有4个元素的数组,并将0、1、2、3、4赋值给数组,扩充数组为6个元素保留原来的数组元素值,把5、6赋值给新元素. 编写函数将一个NxN的二维数组的周边元素“顺时针”轮转1位.例如:轮转前的数组 轮转后的数组 1 2 3 4 1 2 4 5 6 ---> 7 5 3 7 8 9 8 9 6 matlab随机排列组合希望写出一个这样的程序:在数组【1,2,3】中随机抽取两个数数组【4,5,6】中随机抽取两个数数组【7,8,9】中随机抽取两个数再将上面抽出的6个数的可能组合都列出想用MATLAB 定义数组A(1,2,3,4),B(5,6,7,8)输入A时随机输出数组A中的一个数,当输入B时随机输出数组B中的一个数用C语言编, 27、若有以下a数组,数组元素和它们的值如下所示:数组元素:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a27、若有以下a数组,数组元素和它们的值如下所示:数组元素:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8], 数字排序将一个8位的数组排序,将其下标按大小储存在另一个数组当中(用c或者vb)例如有这样一个8位数组int cj[7];//例如cj[0]=12;cj[1]=2;cj[2]=31;cj[3]=231;cj[4]=0;cj[5]=123;cj[6]=679;cj[7]=790 一个维数组,求大于等于数组内的所有值的平均值的个数 例,{1、2、3、4、5、6、7、8、9、10} 输出 5 c语言程序设计对x数组({1,2,3,4}{5,6,7,8}{9,10,11,12}{13,14,15,16})输出数组的右上半三角 定义一个整型数组,int a[]=(1,2,3,4,5,6,7,8,9,10)利用指针输出全部数组元素 打印以下数组,并将对角线的数的和放在文本框中.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 VB打印以下数组,并将对角线的数的和放在文本框中.1 2 3 45 6 7 89 10 11 1213 14 15 16 c编写函数将一个NxN的二维数组“垂直”翻转.我错了?怎么改例如:翻转前的数组 翻转后的数组1 2 3 3 2 14 5 6 ---> 6 5 47 8 9 9 8 7void invertV(char a[N][N]){ int i,j;for(j=0;j 1、将2,4,6,8,10,12,14,16保存在整形数组中,并计算并输出该数组元素的和. 已知数组a[5]={1,2,3,4,5},将数组中所有的数都乘2,并在屏幕显示. pascal题从键盘上输入一组自然数写到数组A中,并将其内容按颠倒的次序重放,只能使用一个数组A.如输入 2 6 9 8 5 3 7 4 1,则数组A中数据为1 4 7 3 5 8 9 6 2 .用array哦!4:00前在加分4:00前面加10分