让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出
2013-12-04 17:07
471 查看
题目:
让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出
(1)方法1
方法1:先将数组元素原先的对应位置记录在另一个数组中
并在进行选择排序的过程中,交换数组元素的同时也交换对应位置数组中的对应元素值
(2)方法2
方法2:先将数组元素存放在另一个数组中
排序
对排序后的数组元素依次去查找原先数组中的对应位置
让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出
(1)方法1
方法1:先将数组元素原先的对应位置记录在另一个数组中
并在进行选择排序的过程中,交换数组元素的同时也交换对应位置数组中的对应元素值
/* 选择法排序 并在排序后的数组元素在原先数组的对应位置输出 方法1:先将数组元素原先的对应位置记录在另一个数组中 并在进行选择排序的过程中,交换数组元素的同时也交换对应位置数组中的对应元素值 */ #include <iostream> using namespace std; int main( ) { int a[11],i,j,k,t; //a数组记录元素数值 int f[11]; //f数组记录a中原先的数组元素位置 cout<<"enter the originl array:"<<endl; for(i=1;i<=10;i++) cin>>a[i]; //输入10个数 for(i=1;i<=10;i++) f[i]=i; //初始化原先数组元素位置 //选择法排序 for(i=1;i<=9;i++) { k=i; for(j=i+1;j<=10;j++) if(a[j]<a[k]) k=j; //交换a[k]和a[i] t=a[k]; a[k]=a[i]; a[i]=t; //交换f[k]和f[i],记录位置随数据交换的同时也要改变 t=f[k]; f[k]=f[i]; f[i]=t; } cout<<"the sorted array:"<<endl; for(i=1;i<=10;i++) cout<<a[i]<<" "; //输出10个已排好序的数 cout<<endl; cout<<"putout the location of originl array:"<<endl; for(i=1;i<=10;i++) cout<<f[i]<<" "; cout<<endl; return 0; }
(2)方法2
方法2:先将数组元素存放在另一个数组中
排序
对排序后的数组元素依次去查找原先数组中的对应位置
/* 选择法排序 并在排序后的数组元素在原先数组的对应位置输出 方法2:先将数组元素存放在另一个数组中 排序 对排序后的数组元素依次去查找原先数组中的对应位置 */ #include <iostream> using namespace std; #define N 10 int main( ) { int a[N+1],i,j,k,t,flag; //a数组记录元素数值,flag表示查找到的位置 int b[N+1]; //b数组存放a数组中的所有元素值 cout<<"enter the originl array:"<<endl; for(i=1;i<=N;i++) cin>>a[i]; //输入10个数 for(i=1;i<=N;i++) b[i]=a[i]; //初始化原先数组元素位置 //选择法排序 for(i=1;i<=N-1;i++) { k=i; for(j=i+1;j<=N;j++) if(a[j]<a[k]) k=j; //交换a[k]和a[i] t=a[k]; a[k]=a[i]; a[i]=t; } cout<<"the sorted array:"<<endl; for(i=1;i<=N;i++) cout<<a[i]<<" "; //输出10个已排好序的数 cout<<endl; cout<<"putout the location of originl array:"<<endl; for(j=1;j<=N;j++) { if(j==1) //排序后第一个元素的位置查找 { for(i=1;i<=N;i++) if(a[j]==b[i]) {cout<<i<<" "; flag=i; //记录下当前找到的位置 break; } } else //排序后除了一个元素以外其它元素的查找 { if(a[j-1]==a[j]) //如果排序后的相邻两个元素相等,即当前元素与前一次查找的元素相同 {for(i=flag+1;i<=N;i++) //则从上次找到的位置flag后一个位置开始查找 if(a[j]==b[i]) {cout<<i<<" "; flag=i; //记录下当前找到的位置 break; } } else //当前元素与前一次查找的元素不相同 {for(i=1;i<=N;i++) if(a[j]==b[i]) {cout<<i<<" "; flag=i; //记录下当前找到的位置 break; } } } } cout<<endl; return 0; }
相关文章推荐
- 个有10个元素的整型一维数组,用户输入9个数据,调用函数,对数组元素进行从小到大排序后,在函数中输入一个数,插入到数组中正确的位置,并输出
- 用3位以内的随机整数填充长度为20的整型数组,然后使用冒泡排序法按升序进行排序,输出排序后的数组元素(每行输出10个元素)。
- 定义一个有10个元素的double型数组,然后从数组的最后一个元素倒着输出到第0个元素。并将数组元素进行累加。(java:数组和for循环)
- 输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。
- XSLT2.0 从外部读取信息并分析生成对应文件.采用xsl:for-each-group进行排序输出
- 对JSON数组对象排序-有键相同的元素,分组数量不一致,可采用如下的JS进行循环表格输出
- 两个数组 [n] [m] n>m 第一个数组的数字无序排列 第二个数组为空 取出第一个数组的最小值 放到第二个数组中第一个位置, 依次类推. 不能改变A数组,不能对之进行排序,也不可以倒到别的数组中。
- n个无序整数,已知第i个数在排好序的序列中的位置为j,满足|i-j|<=K,请设计一种排序算法,对该序列进行排序。注:算法时间复杂度为O(nlgn)的得0分,复杂度为O(nk) 的得两分,总分是20分
- 输入10个整数,将它们从小到大排序后输出,并给出现在每个元素在原来序列中的位置。
- 对一个数组元素排序,对应的数组元素排序
- 输入一个数组,对数组进行排序,并输出该数组中重复元素出现的次数
- 这是一个我面试某公司的算法题目:对一个字符数组进行排序,根据给定的字符,大于它的,放在数组的左边,小于它的,放在数组的右边,且数组中的元素之间的相对位置要保持不变。
- 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的交换.将数组中的元素按对应位置放置使得a[i]=i
- 数据结构与算法分析 c++11 题3.1 由一个链表元素指定另一个链表对应位置的元素输出
- 定义一个List集合并实例化对应的实现类对象。循环输入任意个整数,输入0结束输入循环,对集合中的数据进行从大到小的排序后输出
- 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的交换.将数组中的元素按对应位置放置使得a[i]=i
- 把一个数组中的0元素移动到数组最尾端,其他非0元素进行排序,最后输出
- 两个数组[n] [m] n>m 第一个数组的数字无序排列 第二个数组为空 取出第一个数组的最小值 放到第二个数组中第一个位置, 依次类推. 不能改变A数组,不能对之进行排序,也不可以倒到别的数组中。
- javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)
- 定义一个一维数组,其元素个数从键盘中输入,元素的值为[100,200]的随机整数。 (1)输出数组的每个数 (2)对数组的数进行升序排序,输出排序后的数组元素 (3)从键盘上输入一个整数,查找该整数是