一道面试题目 数组排序

ruisheng_412 2009-10-31 11:42:38
数组包含 1,9,10,3,20,4,6,5,19等数字,写一个方法实现 数组的排序是:
最大+最小+次大+次小+。。。。。这样排序。
...全文
425 24 打赏 收藏 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
liquanhhh 2009-11-15
  • 打赏
  • 举报
回复
C# 实现
//数组包含 1,9,10,3,20,4,6,5,19等数字,写一个方法实现 数组的排序是:
//最大+最小+次大+次小+。。。。。这样排序。
public static int[] SpecialSort(int[] arr)
{
Array.Sort(arr);

List<int> ret = new List<int>();
for (int i = 0; i < (arr.Length +1)/2; i++)
{
ret.Add(arr[arr.Length - i - 1]);
if (i < arr.Length -i -1)
{
ret.Add(arr[i]);
}
}
int[] temp = ret.ToArray();
return temp;
}
haojia0716 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 lxxzhy 的回复:]
貌似楼上某位同学说用冒泡的思想是亮点.
[/Quote]

冒泡慢嘛 要是数据量较大 还不如先快排一遍 再遍历一遍 都比冒泡快
lxxzhy 2009-11-01
  • 打赏
  • 举报
回复
貌似楼上某位同学说用冒泡的思想是亮点.
lulu0126 2009-11-01
  • 打赏
  • 举报
回复
定义一个数组, 先sort一下!

把下标为0.2.4.。。。。。放进一个数组

把1.3.5.。。。。。放进一个数组 convert一下!


再插到第个数组中就行了!




whmjxa 2009-10-31
  • 打赏
  • 举报
回复
不用集合类的话你 可以采用选择排序法
奇数选最大,偶数选最小。。。
老张-AI 2009-10-31
  • 打赏
  • 举报
回复
学习了
haojia0716 2009-10-31
  • 打赏
  • 举报
回复
就是这样 很简单

public static void main(String[] args) {
int[] data = { 1, 9, 10, 3, 20, 4, 6, 5, 19 };
Arrays.sort(data);
System.out.println(Arrays.toString(data));
List<Integer> list = new ArrayList<Integer>();
for (int i = 0, j = data.length - 1; i <= j; i++, j--) {
if (i != j) {
list.add(data[j]);
list.add(data[i]);
} else {
list.add(data[i]);
}
}
System.out.println(list);
}
amdgaming 2009-10-31
  • 打赏
  • 举报
回复
写个 用 集合类的 。。

/**
* @param args
*/
public static void main(String[] args)
{
int[] array = { 1, 9, 10, 3, 20, 4, 6, 5, 19, 25 };

Arrays.sort(array);

List list = new ArrayList();
for (int i = array.length - 1; i >= 0; i--)
{
list.add(array[i]);
}

while (list.size() > 0)
{

System.out.println((Integer) list.get(0));
if (list.size() == 1)
return;
System.out.println((Integer) list.get(list.size() - 1));
list.remove(list.size() - 1);
if (list.size() == 0)
return;
list.remove(0);
}

}

swandragon 2009-10-31
  • 打赏
  • 举报
回复
只做了输出,要得到数组,可以将输出赋值给一个数组

public static void main(String[] args){
int[] arr = {1,9,10,3,20,4,6,5,19};
Arrays.sort(arr);
int length = arr.length;
//循环长度
int forLength = 0;
//数组个数奇偶
boolean odd = false;
if((length & 1) != 0){
forLength = length /2 + 1;
odd = true;
}else {
forLength = length / 2 ;
}
for(int i = 0 ;i < forLength ; i ++){
if(odd && (i == forLength - 1)){
System.out.println(arr[i]);
}else
System.out.println(arr[length-1-i]+" -- "+arr[i]);
}
}
cweijiaweil 2009-10-31
  • 打赏
  • 举报
回复
public static void main(String[] args) {
int[] array={4,3,6,7,2,9};
int max=array[0];
int tap;
for (int i = 0; i < array.length; i++) {
max=array[i];
for (int j = i; j < array.length; j++) {
if(max<array[j]){
tap=array[i];
array[i]=array[j];
array[j]=tap;
}
}
}
}
afunx 2009-10-31
  • 打赏
  • 举报
回复
同意LS的观点
jiuren337 2009-10-31
  • 打赏
  • 举报
回复
其实我觉得这是一个可以泛化的问题,大虾们不应该只针对这一题而做解答..
Sodino 2009-10-31
  • 打赏
  • 举报
回复
排序之后,根据最大与最小的序号之和为(size - 1)进行输出。
ldm1011 2009-10-31
  • 打赏
  • 举报
回复
private void test() {
int[] array = {1,9,10,3,20,4,6,5,19};
List<Integer> list = new ArrayList<Integer>();
Arrays.sort(array);
int i = 0;
int j = array.length - 1;
while((i != j) && (i + 1 != j)) {
list.add(array[j--]);
list.add(array[i++]);
}
if (i == j) {
list.add(array[i]);
}
for (Integer listItem : list) {
System.out.println(listItem);
}
}

经测试,结果正确
qjcslgnhwayagain 2009-10-31
  • 打赏
  • 举报
回复
/*数组包含 1,9,10,3,20,4,6,5,19等数字,
写一个方法实现 数组的排序是:
最大+最小+次大+次小+。。。。。这样排序*/
class ArrSort
{
public static int[] arrSort(int [] arr)
{
int []arr2=new int[arr.length];
int t;
for(int i=0;i<arr.length;i++)
{
for(int j=i;j<arr.length;j++)
{
if(arr[i]>arr[j])
{
t=arr[i];
arr[i]=arr[j];
arr[j]=t;

}
}
}
for(int i=0;i<arr.length/2;i++)
{
arr2[i*2]=arr[arr.length-1-i];
arr2[i*2+1]=arr[i];
}
if(arr.length%2==1)
{
arr2[arr.length-1]=arr[arr.length/2];
}
return arr2;
}
public static void main(String []args)
{
int []arr={1,9,10,3,20,4,6,5,19};
int []arr2=new int [arr.length];
System.out.println("the array before sort:");
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
arr2=arrSort(arr);
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("the array afeter sort:");
for(int i=0;i<arr2.length;i++)
{
System.out.print(arr2[i]+" ");
}

}
}
  • 打赏
  • 举报
回复
不是很复杂,但不知道是否还有更简单的
public class TestSort {
public static void main(String[] args){
int[] a={1,9,10,3,20,4,6,5,19};

System.out.print("原始数组:");
for(int i:a){
System.out.print(i+"\t");
}
System.out.println();

System.out.print("排 序 后:");
Arrays.sort(a);
for(int i:a){
System.out.print(i+"\t");
}
System.out.println();

//整理
int[] b=new int[a.length];
int[] index={0,1,a.length-1,-1};

for(int i=0,m,len=a.length;i<len;i++){
m=i%2==0?2:0;
b[i]=a[index[m]];
index[m]+=index[m+1];
}
System.arraycopy(b,0,a,0,b.length);

//整理后
System.out.print("整 理 后:");
for(int i:a){
System.out.print(i+"\t");
}
}
}
whuisszl008 2009-10-31
  • 打赏
  • 举报
回复

int[] arr = {1,5,9,6,3,4,2,7};
Arrays.sort(arr);
List<Integer> list = new ArrayList<Integer>();
int size = arr.length;
for(int i=0; i<size/2; i++){
list.add(arr[size-1-i]);
list.add(arr[i]);
}
if(size%2!=0){
list.add(arr[size/2]);
}
System.out.println(list.toString());
}
}

lianfeng1201 2009-10-31
  • 打赏
  • 举报
回复
用数组实现
 public static void main(String[] args) {
int[] array = { 1, 9, 10, 3, 20, 4, 6, 5, 19 };
Arrays.sort(array);
int[] newArray = new int[array.length];
int start = 0;
int end = array.length;
for (int i = 0; i < array.length; i++) {
if (i % 2 == 0) {
newArray[i] = array[end - 1];
end--;
} else {
newArray[i] = array[start];
start++;
}
}
System.out.println(Arrays.toString(newArray));
}
siakang 2009-10-31
  • 打赏
  • 举报
回复
可以把这组数放2个数组里,一个大到小排序, 一个小到大排序,往前一数组里插入
Jverson2009 2009-10-31
  • 打赏
  • 举报
回复
这个原理其实非常简单,先从小到大排序,然后尾一个头一个的取出来不就行了嘛!
加载更多回复(4)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧