已知一数组,按第一个数最大第二个数最小,依次下去进行的规则排序
2012-10-07 11:33
363 查看
已知一数组,按第一个数最大第二个数最小,依次下去进行的规则排序
已知一数组:21 25 11 32 12 35 55 77 66 90 56要求按以下规则进行排序:第一个数最大,第二个数最小, 第三个数是剩下中的最大的,第四个数是剩下中的最小的,依此类推
思路:每两个元素为一队进行比较,使之符合大的在前,小的在后的顺序,例如:.21 25 11 32 12 35 55 77 66 90 56变成25 21 32 11 35 12 77 55 90 66 56; 然后遍历数组,进行操作使之符合规则
程序:
#include <iostream> using namespace std; int a[]={21, 25, 11, 32, 12, 35, 55, 77, 66, 90, 56}; int length=11; void swap(int i, int j) { int temp = a[i]; a[i]=a[j]; a[j]=temp; } void bigSmall(int i, int j){ if(a[i]<a[j]) { swap(i, j); } } void bigSmallSort(){ for(int i=1; i<length; i+=2){ bigSmall(i-1, i); } int low = 1; int big, small; while(low<length) { big=low-1; small=low; for(int i=low+2; i<length; i+=2) { if(a[i]<a[i-2]){ small=i; } if(a[i-1]>a[i-3]) { big=i-1; } } if(length%2!=0) { if(a[small]>a[length-1]){ small=length-1; } if(a[big]<a[length-1]){ big=length-1; } } swap(low-1, big); swap(low, small); bigSmall(big, big+1); bigSmall(small-1, small); low+=2; } } int main(int argc, char** argv) { cout<<"the original array:"<<endl; for(int i=0; i<length; i++){ cout<<a[i]<<" "; } bigSmallSort(); cout<<endl<<"after bigSmall sort:"<<endl; for(int i=0; i<length; i++){ cout<<a[i]<<" "; } return 0; }
输出:
the original array:
21 25 11 32 12 35 55 77 66 90 56
after bigSmall sort:
90 11 77 25 66 21 56 12 55 32 35
相关文章推荐
- 一道面试题,对一个数组进行排序,第一个最大,第二个最小,第三个次大,一次类推
- 两个数组 [n] [m] n>m 第一个数组的数字无序排列 第二个数组为空 取出第一个数组的最小值 放到第二个数组中第一个位置, 依次类推. 不能改变A数组,不能对之进行排序,也不可以倒到别的数组中。
- 两个数组[n] [m] n>m 第一个数组的数字无序排列 第二个数组为空 取出第一个数组的最小值 放到第二个数组中第一个位置, 依次类推. 不能改变A数组,不能对之进行排序,也不可以倒到别的数组中。
- 数组操作,将数组排序,然后按最大-最小-第二大-第二小。。。。进行
- 排序,要求第一个数最大,第二个数最小,第三个数第二大,第四个数第二小,以此类推
- java编程:将数组的第一个为最大第二个为最小以此类推
- php中根据一组数组输出第一个数是最大的,第二个数是最小的 ,第三个数是第二大,第四个数是第二小...以此类推。。。。
- 一道面试题:对一个数组进行排序,要求第一个最大、第二
- 对如下数组排序 {12,1,23,24,235,237,231,571,575,57} 排序规则如下:先找第一位,比较大的,如果相同,接着按第二位找,找第二位比较大的,依次类推,进行排序
- 一个锻炼思维能力的简单的排序例子,要求第一个数最大,第二个数最小,第三个数第二大,第四个数第二小,以此类推
- 算法:一个排序(第一个最大,第二个最小,第三个其次大,第四其次小...)
- 堆的数据结构能够使得堆顶总是维持最大(对于大根堆)或最小(对于小根堆),给定一个数组,对这个数组进行建堆,则平均复杂度是多少?如果只是用堆的 push 操作,则一个大根堆依次输入 3,7,2,4,1,5,8 后,得到的堆的结构示意图是下述图表中的哪个?
- 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- Java开发练习1,输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- java 使用面向对象方式实现录入学生信息,取出成绩最大值、最小值、平均值、对其进行排序
- 【读书笔记】输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 数组 获取最值(最大值 最小值)选择排序 冒泡排序 快速排序 半查找(二分查找) 十进制转其他进制法
- 最大值、最小值、平均值、和、数组反转、数组排序
- 设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。