数组排序问题(来着有分)

gujinf2008 2011-09-08 02:52:08
有一个整形数组,请按最大、最小、次大、次小.....的顺序排列,我想出了下面的想法,别人说我一个数组就够了,干嘛整出来两个,如果有一万个数据呢?有谁还有别的想法,希望大家畅所欲言,谢谢,来着酌情给分的。
...全文
317 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
gujinf2008 2011-09-16
  • 打赏
  • 举报
回复
好,结贴,呵呵
[Quote=引用 39 楼 pcmlose 的回复:]
学习,顺便来拿分
[/Quote]
2399 2011-09-15
  • 打赏
  • 举报
回复
排序算法吧,好多,
gujinf2008 2011-09-15
  • 打赏
  • 举报
回复
不管是怎样的,是好算法就行,其实我感觉你的也是冒泡,或许是两个的结合,选择排序我记得不太清楚了,不要拘泥于什么算法,灵活运用才是最重要的,我觉得你做的很好。
[Quote=引用 35 楼 x19881216 的回复:]
貌似俺写的那个是选择排序而gukuitian的是冒泡
[/Quote]
小绵羊 2011-09-15
  • 打赏
  • 举报
回复
貌似俺写的那个是选择排序而gukuitian的是冒泡
gujinf2008 2011-09-15
  • 打赏
  • 举报
回复
怎么没人关注了,再顶顶,然后结贴。
pcmlose 2011-09-15
  • 打赏
  • 举报
回复
学习,顺便来拿分
gujinf2008 2011-09-15
  • 打赏
  • 举报
回复
说说你的见解呗?呵呵
[Quote=引用 37 楼 jike316 的回复:]
排序算法吧,好多,
[/Quote]
flyingZippo 2011-09-14
  • 打赏
  • 举报
回复
冒泡的精髓呀,学习了
hahaheda 2011-09-13
  • 打赏
  • 举报
回复
牛人啊~
dslpk 2011-09-13
  • 打赏
  • 举报
回复
顶一下
txfcy2010 2011-09-13
  • 打赏
  • 举报
回复
冒个泡
asdfgcjw 2011-09-13
  • 打赏
  • 举报
回复
学习了
daijope 2011-09-13
  • 打赏
  • 举报
回复
package com.cn.sort;

public class FindLastTwo {
public static void main(String[] args) {
int[] a = new int[]{9,10,2,1};
int lastTwoNum = findLastTwo(a);
System.out.println(lastTwoNum);
}
//时间复杂度为O(n)
private static int findLastTwo(int[] a) {
int min = Integer.MAX_VALUE;
int lastTwo = Integer.MAX_VALUE;
if (a.length >= 2) {
if (a[0] < a[1]) {
min = a[0];
lastTwo = a[1];
} else {
min = a[1];
lastTwo = a[0];
}
} else {
return Integer.MIN_VALUE;
}
for (int i = 2; i < a.length; i++) {
if (a[i] < min) {
lastTwo = min;
min = a[i];
} else if (a[i] < lastTwo) {
lastTwo = a[i];
}
}
if (min <= lastTwo) {
return lastTwo;
} else {
return min;
}
}
}


倒数第二小的,
小绵羊 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 gukuitian 的回复:]

。。。。弄出雷同卷。。
刚开网页的时候还没看见你上面的代码。晕啊
引用 22 楼 x19881216 的回复:
引用 21 楼 gukuitian 的回复:

主要是我觉得要是面试的话,问排序,就应该用排序的方法。
当然两个数组实现是没问题了
下面的代码参考下
Java code
public static void main(String args[]) throws IOE……
[/Quote]
gukuitian 2011-09-13
  • 打赏
  • 举报
回复
。。。。弄出雷同卷。。
刚开网页的时候还没看见你上面的代码。晕啊
[Quote=引用 22 楼 x19881216 的回复:]
引用 21 楼 gukuitian 的回复:

主要是我觉得要是面试的话,问排序,就应该用排序的方法。
当然两个数组实现是没问题了
下面的代码参考下
Java code
public static void main(String args[]) throws IOException
{
int a[]={19,20,2,4,6,8,29,5,1,30};
boolean fla……
[/Quote]
小绵羊 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 gukuitian 的回复:]

主要是我觉得要是面试的话,问排序,就应该用排序的方法。
当然两个数组实现是没问题了
下面的代码参考下
Java code
public static void main(String args[]) throws IOException
{
int a[]={19,20,2,4,6,8,29,5,1,30};
boolean flag=tr……
[/Quote]
你这个跟我的那个差不多,不过你的这个交换次数比较多,而我那个是直接把要的值冒到最上面来,一轮最多交换一次
gukuitian 2011-09-13
  • 打赏
  • 举报
回复
主要是我觉得要是面试的话,问排序,就应该用排序的方法。
当然两个数组实现是没问题了
下面的代码参考下
	public static void main(String args[]) throws IOException
{
int a[]={19,20,2,4,6,8,29,5,1,30};
boolean flag=true;//true时取最大值,false取最小
int temp; //用于交换
for(int i=0;i<a.length;i++)
{
for(int j=a.length-1;j>=1+i;j--)
{
if(flag&&a[j]>a[j-1])
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
if(!flag&&a[j]<a[j-1])
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
flag=!flag;
}
System.out.println(Arrays.toString(a));
}

[Quote=引用 13 楼 gujinf2008 的回复:]
我没明白你说的,说说思路吧,详细点的,什么是反向的冒泡排序。

引用 12 楼 gukuitian 的回复:
要是面试题的话,我会用一次反向的冒泡排序实现,
根据奇数次和偶数次,判断每次取最大和最小值。

我感觉面试的时候,思路清析,代码要简洁
[/Quote]
niuniu20008 2011-09-13
  • 打赏
  • 举报
回复
学习啊,好厉害
小绵羊 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 x19881216 的回复:]

Java code

public class Test {
public static void main(String[] args) {
int[] array = { 5, 2, 6, 4, 3, 1, 8, 10, 9, 7 };

for (int i = 0; i < array.length; i++) {
int……
[/Quote]
一直向后交替搜索最大值和最小值,找到以后和起点值交换
5, 2, 6, 4, 3, 1, 8, 10, 9, 7第一次查找最大值从0下标开始找到10跟0下标交换得到
10, 2, 6, 4, 3, 1, 8, 5, 9, 7第二次差早最小值从1下标开始找到1跟1下标交换得到
5, 1, 6, 4, 3, 2, 8, 10, 9, 7后面依次类推
小绵羊 2011-09-13
  • 打赏
  • 举报
回复

public class Test {
public static void main(String[] args) {
int[] array = { 5, 2, 6, 4, 3, 1, 8, 10, 9, 7 };

for (int i = 0; i < array.length; i++) {
int flag = (i + 1) % 2;
int tmp = array[i];
int point = i;
for (int j = i; j < array.length; j++) {
if (flag != 0) {
if (array[j] > tmp) {
tmp = array[j];
point = j;
}
} else {
if (array[j] < tmp) {
tmp = array[j];
point = j;
}
}
}
if (i != point) {
array[i] = array[i] ^ array[point];
array[point] = array[i] ^ array[point];
array[i] = array[i] ^ array[point];
}
}
System.out.println(Arrays.toString(array));
}
}
加载更多回复(19)

62,615

社区成员

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

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