java 为什么没有进行快速排序 java?

提问回答都赚钱
> 问题详情
排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
悬赏:0&&答案豆&&&&提问人:匿名网友&&&&提问收益:0.00答案豆&&&&&&
排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
发布时间:&&截止时间:
网友回答&(共0条)
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&91.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&91.00元收益
回答悬赏问题预计能赚取&4.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&4.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&91.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&51.00元收益
回答悬赏问题预计能赚取&51.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&22.00元收益
回答悬赏问题预计能赚取&22.00元收益
回答悬赏问题预计能赚取&2.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&3.00元收益
回答悬赏问题预计能赚取&1.00元收益
回答悬赏问题预计能赚取&1.00元收益
你可能喜欢的
[] [] [] [] [] [] [] [] [] [] [] []
请先输入下方的验证码查看最佳答案
图形验证:让天下没有难学的技术
JVM的重排序
JVM的重排序
感谢同事【】的投稿
重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段。重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境。
在并发程序中,程序员会特别关注不同进程或线程之间的数据同步,特别是多个线程同时修改同一变量时,必须采取可靠的同步或其它措施保障数据被正确地修改,这里的一条重要原则是:不要假设指令执行的顺序,你无法预知不同线程之间的指令会以何种顺序执行。
但是在单线程程序中,通常我们容易假设指令是顺序执行的,否则可以想象程序会发生什么可怕的变化。理想的模型是:各种指令执行的顺序是唯一且有序的,这个顺序就是它们被编写在代码中的顺序,与处理器或其它因素无关,这种模型被称作,也是基于冯·诺依曼体系的模型。当然,这种假设本身是合理的,在实践中也鲜有异常发生,但事实上,没有哪个现代多处理器架构会采用这种模型,因为它是在是太低效了。而在编译优化和CPU流水线中,几乎都涉及到指令重排序。
一、编译期重排序
编译期重排序的典型就是通过调整指令顺序,在不改变程序语义的前提下,尽可能减少寄存器的读取、存储次数,充分复用寄存器的存储值。
假设第一条指令计算一个值赋给变量A并存放在寄存器中,第二条指令与A无关但需要占用寄存器(假设它将占用A所在的那个寄存器),第三条指令使用A的值且与第二条指令无关。那么如果按照顺序一致性模型,A在第一条指令执行过后被放入寄存器,在第二条指令执行时A不再存在,第三条指令执行时A重新被读入寄存器,而这个过程中,A的值没有发生变化。通常编译器都会交换第二和第三条指令的位置,这样第一条指令结束时A存在于寄存器中,接下来可以直接从寄存器中读取A的值,降低了重复读取的开销。
二、重排序对于流水线的意义
现代CPU几乎都采用流水线机制加快指令的处理速度,一般来说,一条指令需要若干个CPU时钟周期处理,而通过流水线并行执行,可以在同等的时钟周期内执行若干条指令,具体做法简单地说就是把指令分为不同的执行周期,例如读取、寻址、解析、执行等步骤,并放在不同的元件中处理,同时在执行单元EU中,功能单元被分为不同的元件,例如加法元件、乘法元件、加载元件、存储元件等,可以进一步实现不同的计算并行执行。
流水线架构决定了指令应该被并行执行,而不是在顺序化模型中所认为的那样。重排序有利于充分使用流水线,进而达到的效果。
三、确保顺序性
尽管指令在执行时并不一定按照我们所编写的顺序执行,但毋庸置疑的是,在单线程环境下,指令执行的最终效果应当与其在顺序执行下的效果一致,否则这种优化便会失去意义。
通常无论是在编译期还是运行期进行的指令重排序,都会满足上面的原则。
四、Java存储模型中的重排序
在Java存储模型(Java Memory Model, JMM)中,重排序是十分重要的一节,特别是在并发编程中。JMM通过happens-before法则保证顺序执行语义,如果想要让执行操作B的线程观察到执行操作A的线程的结果,那么A和B就必须满足happens-before原则,否则,JVM可以对它们进行任意排序以提高程序性能。
volatile关键字可以保证变量的可见性,因为对volatile的操作都在Main Memory中,而Main Memory是被所有线程所共享的,这里的代价就是牺牲了性能,无法利用寄存器或Cache,因为它们都不是全局的,无法保证可见性,可能产生脏读。
volatile还有一个作用就是局部阻止重排序的发生,对volatile变量的操作指令都不会被重排序,因为如果重排序,又可能产生可见性问题。
在保证可见性方面,锁(包括显式锁、对象锁)以及对原子变量的读写都可以确保变量的可见性。但是实现方式略有不同,例如同步锁保证得到锁时从内存里重新读入数据刷新缓存,释放锁时将数据写回内存以保数据可见,而volatile变量干脆都是读写内存。
原创文章,转载请注明: 转载自
本文链接地址:
资深Java研发工程师,关注系统稳定性、性能优化、Web系统架构。
Latest posts by 王 晨纯 ()
Related posts:
(1 votes, average: 3.00 out of 5)
Loading...
(window.slotbydup=window.slotbydup || []).push({
id: '980251',
container: s,
size: '300,80',
display: 'inlay-fix'您所在的位置: &
Java程序员必知的8大排序
Java程序员必知的8大排序
without0815
本文主要详解了Java语言的8大排序的基本思想以及实例解读,详细请看下文
8种排序之间的关系:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/9190.png" />
1,&直接插入排序
(1)基本思想:在要排序的一组数中,假设前面(n-1)[n&=2] 个数已经是排
好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数
也是排好顺序的。如此反复循环,直到全部排好顺序。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/9191.png" />
(3)用java实现
&package&com. && &public&class&insertSort&{ &public&insertSort(){ &&&&&inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; &&&&&int&temp=0; &&&&&for(int&i=1;i&a.i++){ &&&&&&&&int&j=i-1; &&&&&&&&temp=a[i]; &&&&&&&&for(;j&=0&&temp&a[j];j--){ &&&&&&&&a[j+1]=a[j];&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&} &&&&&&&&a[j+1]= &&&&&} &&&&&for(int&i=0;i&a.i++) &&&&&&&&System.out.println(a[i]); &} &}&
2,希尔排序(最小增量排序)
(1)基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
(2)实例:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/9192.png" width="557" height="267" />
(3)用java实现
public&class&shellSort&{ &public&&shellSort(){ &&&&&int&a[]={1,54,6,3,78,34,12,45,56,100}; &&&&&double&d1=a. &&&&&int&temp=0; &&&&&while(true){ &&&&&&&&&d1=&Math.ceil(d1/2); &&&&&&&&&int&d=(int)&d1; &&&&&&&&&for(int&x=0;x&d;x++){ &&&&&&&&&&&&&for(int&i=x+d;i&a.i+=d){ &&&&&&&&&&&&&&&&&int&j=i-d; &&&&&&&&&&&&&&&&&temp=a[i]; &&&&&&&&&&&&&&&&&for(;j&=0&&temp&a[j];j-=d){ &&&&&&&&&&&&&&&&&a[j+d]=a[j]; &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&a[j+d]= &&&&&&&&&&&&&} &&&&&&&&&} &&&&&&&&&if(d==1) &&&&&&&&&&&&&break; &&&&&} &&&&&for(int&i=0;i&a.i++) &&&&&&&&&System.out.println(a[i]); &} &}&
3.简单选择排序
(1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;
然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
(2)实例:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/9193.png" width="547" height="210" />
(3)用java实现
public&class&selectSort&{ &&&&&public&selectSort(){ &&&&&&&&&int&a[]={1,54,6,3,78,34,12,45}; &&&&&&&&&int&position=0; &&&&&&&&&for(int&i=0;i&a.i++){ &&&&&&&&&&&&& &&&&&&&&&&&&&int&j=i+1; &&&&&&&&&&&&&position=i; &&&&&&&&&&&&&int&temp=a[i]; &&&&&&&&&&&&&for(;j&a.j++){ &&&&&&&&&&&&&if(a[j]&temp){ &&&&&&&&&&&&&&&&&temp=a[j]; &&&&&&&&&&&&&&&&&position=j; &&&&&&&&&&&&&} &&&&&&&&&&&&&} &&&&&&&&&&&&&a[position]=a[i]; &&&&&&&&&&&&&a[i]= &&&&&&&&&} &&&&&&&&&for(int&i=0;i&a.i++) &&&&&&&&&&&&&System.out.println(a[i]); &&&&&} &} &
(1)基本思想:堆排序是一种树形选择排序,是对直接选择排序的有效改进。
堆的定义如下:具有n个元素的序列(h1,h2,...,hn),当且仅当满足(hi&=h2i,hi&=2i+1)或(hi&=h2i,hi&=2i+1) (i=1,2,...,n/2)时称之为堆。在这里只讨论满足前者条件的堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最大项(大顶堆)。完全二叉树可以很直观地表示堆的结构。堆顶为根,其它为左子树、右子树。初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储序,使之成为一个堆,这时堆的根节点的数最大。然后将根节点与堆的最后一个节点交换。然后对前面(n-1)个数重新调整使之成为堆。依此类推,直到只有两个节点的堆,并对它们作交换,最后得到有n个节点的有序序列。从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。所以堆排序有两个函数组成。一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。
(2)实例:
初始序列:46,79,56,38,40,84
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/9194.png" width="337" height="223" />
交换,从堆中踢出最大数
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/9195.png" width="440" height="296" />
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/9196.png" width="378" height="265" />
依次类推:最后堆中剩余的最后两个结点交换,踢出一个,排序完成。
(3)用java实现
import&java.util.A &&public&class&HeapSort&{ &&&&&&int&a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; &&&&&public&&HeapSort(){ &&&&&&&&&heapSort(a); &&&&&} &&&&&public&&void&heapSort(int[]&a){ &&&&&&&&&System.out.println(&开始排序&); &&&&&&&&&int&arrayLength=a. &&&&&&&&&&&&&&&&&&for(int&i=0;i&arrayLength-1;i++){ &&&&&&&&&&&&&&&&&&&&&buildMaxHeap(a,arrayLength-1-i); &&&&&&&&&&&&&&&&&&&&&&&&&&swap(a,0,arrayLength-1-i); &&&&&&&&&&&&&System.out.println(Arrays.toString(a)); &&&&&&&&&} &&&&&} &&&&&&private&&void&swap(int[]&data,&int&i,&int&j)&{ &&&&&&&&&&&&&&&&&&int&tmp=data[i]; &&&&&&&&&data[i]=data[j]; &&&&&&&&&data[j]= &&&&&} &&&&&&&&&&private&void&buildMaxHeap(int[]&data,&int&lastIndex)&{ &&&&&&&&&&&&&&&&&&&&&&&&&&&for(int&i=(lastIndex-1)/2;i&=0;i--){ &&&&&&&&&&&&&&&&&&&&&&&&&&int&k=i; &&&&&&&&&&&&&&&&&&&&&&&&&&while(k*2+1&=lastIndex){ &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&int&biggerIndex=2*k+1; &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(biggerIndex&lastIndex){ &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(data[biggerIndex]&data[biggerIndex+1]){ &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&biggerIndex++; &&&&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(data[k]&data[biggerIndex]){ &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&swap(data,k,biggerIndex); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&k=biggerI &&&&&&&&&&&&&&&&&}else{ &&&&&&&&&&&&&&&&&&&&&break; &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&}&p&align=&left&&&&span&&&&&/span&}&/p&&p&align=&left&&&&&&}&/p&&p&align=&left&&&&span&style=&background-color:&&&&}&/span&&/p& &
5.冒泡排序
(1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
(2)实例:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/9197.png" width="455" height="238" />
(3)用java实现
public&class&bubbleSort&{ &public&&bubbleSort(){ &&&&&&int&a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; &&&&&int&temp=0; &&&&&for(int&i=0;i&a.length-1;i++){ &&&&&&&&&for(int&j=0;j&a.length-1-i;j++){ &&&&&&&&&if(a[j]&a[j+1]){ &&&&&&&&&&&&&temp=a[j]; &&&&&&&&&&&&&a[j]=a[j+1]; &&&&&&&&&&&&&a[j+1]= &&&&&&&&&} &&&&&&&&&} &&&&&} &&&&&for(int&i=0;i&a.i++) &&&&&System.out.println(a[i]);&&& &} &} &&
6.快速排序
(1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
(2)实例:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/9198.png" width="305" height="401" />
(3)用java实现
public&class&quickSort&{ &&&int&a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; &public&&quickSort(){ &&&&&quick(a); &&&&&for(int&i=0;i&a.i++) &&&&&&&&&System.out.println(a[i]); &} &public&int&getMiddle(int[]&list,&int&low,&int&high)&{&&& &&&&&&&&&&&&&int&tmp&=&list[low];&&&&&&&&&&&&&&&&&while&(low&&&high)&{&&& &&&&&&&&&&&&&&&&&while&(low&&&high&&&&list[high]&&=&tmp)&{&&& &&&&&&&&high--;&&& &&&&&&&&&&&&&&&&&}&&& &&&&&&&&&&&&&&&&&list[low]&=&list[high];&&&&&&&&&&&&&&&&&&&&while&(low&&&high&&&&list[low]&&=&tmp)&{&&& &&&&&&&&&&&&&&&&&&&&&low++;&&& &&&&&&&&&&&&&&&&&}&&& &&&&&&&&&&&&&&&&&list[high]&=&list[low];&&&&&&&&&&&&&&&&}&&& &&&&&&&&&&&&list[low]&=&&&&&&&&&&&&&&&&&&&&&&&&&&&&return&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&& &public&void&_quickSort(int[]&list,&int&low,&int&high)&{&&& &&&&&&&&&&&&&if&(low&&&high)&{&&& &&&&&&&&&&&&&&&&int&middle&=&getMiddle(list,&low,&high);&&&&&&&&&&&&&&&&&&&_quickSort(list,&low,&middle&-&1);&&&&&&&&&&&&&&&&&&&&&&&&_quickSort(list,&middle&+&1,&high);&&&&&&&&&&&&&&&&&&&&}&&& &&&&&&&&&}& &public&void&quick(int[]&a2)&{&&& &&&&&&&&&&&&&if&(a2.length&&&0)&{&&&&&&&&&&&&&&&&&&&&&_quickSort(a2,&0,&a2.length&-&1);&&& &&&&&&&&&}&&& &&&&&&&&}& &} &
7、归并排序
(1)基本排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
(2)实例:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/9199.png" width="402" height="202" />
(3)用java实现
import&java.util.A &&public&class&mergingSort&{ &int&a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; &public&&mergingSort(){ &&&&&sort(a,0,a.length-1); &&&&&for(int&i=0;i&a.i++) &&&&&&&&&System.out.println(a[i]); &} &public&void&sort(int[]&data,&int&left,&int&right)&{ &&&&&&&&&&if(left&right){ &&&&&&&&&&&&&&&&&&int&center=(left+right)/2; &&&&&&&&&&&&&&&&&&sort(data,left,center); &&&&&&&&&&&&&&&&&&sort(data,center+1,right); &&&&&&&&&&&&&&&&&&merge(data,left,center,right); &&&&&&&&& &&&&&} &} &public&void&merge(int[]&data,&int&left,&int&center,&int&right)&{ &&&&&&&&&&int&[]&tmpArr=new&int[data.length]; &&&&&int&mid=center+1; &&&&&&&&&&int&third= &&&&&int&tmp= &&&&&while(left&=center&&mid&=right){ &&&&&&&&&&&&&&if(data[left]&=data[mid]){ &&&&&&&&&&&&&tmpArr[third++]=data[left++]; &&&&&&&&&}else{ &&&&&&&&&&&&&tmpArr[third++]=data[mid++]; &&&&&&&&&} &&&&&} &&&&&&&&&&while(mid&=right){ &&&&&&&&&tmpArr[third++]=data[mid++]; &&&&&} &&&&&while(left&=center){ &&&&&&&&&tmpArr[third++]=data[left++]; &&&&&} &&&&&&&&&&while(tmp&=right){ &&&&&&&&&data[tmp]=tmpArr[tmp++]; &&&&&} &&&&&System.out.println(Arrays.toString(data)); &} &&} &
8、基数排序
(1)基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。
(2)实例:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/91910.png" width="630" height="482" />
(3)用java实现
import&java.util.ArrayL &import&java.util.L &&public&class&radixSort&{ &&&&&int&a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,101,56,17,18,23,34,15,35,25,53,51}; &public&radixSort(){ &&&&&sort(a); &&&&&for(int&i=0;i&a.i++) &&&&&&&&&System.out.println(a[i]); &} &public&&void&sort(int[]&array){&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&int&max=array[0];&&& &&&&&&&&&for(int&i=1;i&array.i++){&&& &&&&&&&&&&&&&&&&if(array[i]&max){&&& &&&&&&&&&&&&&&&&max=array[i];&&& &&&&&&&&&&&&&&&&}&&& &&&&&&&&&&&&&}&&& &&&&&&int&time=0;&&& &&&&&&&&&&&&&&&&&&&&&&&&&while(max&0){&&& &&&&&&&&&&&&&&&&max/=10;&&& &&&&&&&&&&&&&&&&&time++;&&& &&&&&&&&&&&&&}&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&List&ArrayList&&queue=new&ArrayList&ArrayList&();&&& &&&&&&&&&&&&&for(int&i=0;i&10;i++){&&& &&&&&&&&&&&&&&&&&ArrayList&Integer&&queue1=new&ArrayList&Integer&();& &&&&&&&&&&&&&&&&&queue.add(queue1);&&& &&&&&&&&&}&&& &&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&for(int&i=0;i&i++){&&& &&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&for(int&j=0;j&array.j++){&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&int&x=array[j]%(int)Math.pow(10,&i+1)/(int)Math.pow(10,&i); &&&&&&&&&&&&&&&&&&&&ArrayList&Integer&&queue2=queue.get(x); &&&&&&&&&&&&&&&&&&&&queue2.add(array[j]); &&&&&&&&&&&&&&&&&&&&queue.set(x,&queue2); &&&&&&&&&&&&&}&&& &&&&&&&&&&&&&&&&&int&count=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&for(int&k=0;k&10;k++){& &&&&&&&&&&&&&&&&&while(queue.get(k).size()&0){ &&&&&&&&&&&&&&&&&&&&&ArrayList&Integer&&queue3=queue.get(k); &&&&&&&&&&&&&&&&&&&&&&&&&array[count]=queue3.get(0);&&& &&&&&&&&&&&&&&&&&&&&&&&&&queue3.remove(0); &&&&&&&&&&&&&&&&&&&&&count++; &&&&&&&&&&&&&&&}&&& &&&&&&&&&&&&&}&&& &&&&&&&&&&&}&&& &&&&&&&&&&&&&&&& &&&&}&& &&} &
原文链接:【编辑推荐】【责任编辑: TEL:(010)】
关于&&&&的更多文章
又是一周匆匆而过。上周五、周六两天,2013年51CTO云计算架构师
无论你是否真的觉察,机器学习都是如此普遍地在我们生活中体现价值。
JavaScript正凭借新型工具与功能提升以极度夸张的速度
国庆假期前的612,是不是有点折腾?网上的中秋国庆放
刚刚开始接触java数组的人都会听到一句类似的话:java
本书内容包括:
● 框架的总览:SQL Server 2005的功能是如何集成在一起的,以及这些功能对于用户的意义。
51CTO旗下网站使用java从一个整数数组中查找第二大的数,仅用一次循环,不使用java自带的排序_小组_ThinkSAAS
使用java从一个整数数组中查找第二大的数,仅用一次循环,不使用java自带的排序
使用java从一个整数数组中查找第二大的数,仅用一次循环,不使用java自带的排序
package com.jxb.
public class FindSecMax {
public int findSecMax(int[] data) {
int maxNum = 0;
int secMaxNum = 0;
// 先将前两个元素按大小分别赋给第一大和第二大的数
if (data.length & 2)
return -1;
if (data[0] &= data[1]) {
maxNum = data[0];
secMaxNum = data[1];
maxNum = data[1];
secMaxNum = data[0];
// 从第三个开始循环,如果元素大于最大值,则最大值更新,原最大值赋给第二大值
// 如果该元素不大于最大值,且大约第二大的值,则第二大的值更新
for (int i = 2; i & data. i++) {
if (data[i] & maxNum) {
secMaxNum = maxN
maxNum = data[i];
if (data[i] &= secMaxNum) {
secMaxNum = data[i];
return secMaxN
* @param args
public static void main(String[] args) {
FindSecMax fsm = new FindSecMax();
int[] a = new int[] { 10, 9,9, -70000, -90000, -600000,
-500000, -32769 };
System.out.println(fsm.findSecMax(a));
PHP开发框架
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
手机客户端
ThinkSAAS接收任何功能的Iphone(IOS)和Android手机的客户端定制开发服务
官方1群:【已满】
让ThinkSAAS更好,把建议拿来。JAVA数组怎么自动排序,不用冒泡
[问题点数:20分,结帖人qq]
JAVA数组怎么自动排序,不用冒泡
[问题点数:20分,结帖人qq]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年10月 Java大版内专家分月排行榜第二2014年9月 Java大版内专家分月排行榜第二2014年8月 Java大版内专家分月排行榜第二
2016年1月 Java大版内专家分月排行榜第三2014年12月 Java大版内专家分月排行榜第三2014年11月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 java排序算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信