JAVA中有哪几种常用的排序方法?

作者&投稿:瞿迹 (若有异议请与网页底部的电邮联系)

最主要的是冒泡排序、选择排序、插入排序以及快速排序

1、冒泡排序



冒泡排序是一个比较简单的排序方法。在待排序的数列基本有序的情况下排序速度较快。若要排序的数有n个,则需要n-1轮排序,第j轮排序中,从第一个数开始,相邻两数比较,若不符合所要求的顺序,则交换两者的位置;直到第n+1-j个数为止,第一个数与第二个数比较,第二个数与第三个数比较,......,第n-j个与第n+1-j个比较,共比较n-1次。此时第n+1-j个位置上的数已经按要求排好,所以不参加以后的比较和交换操作。

例如:第一轮排序:第一个数与第二个数进行比较,若不符合要求的顺序,则交换两者的位置,否则继续进行二个数与第三个数比较......。直到完成第n-1个数与第n个数的比较。此时第n个位置上的数已经按要求排好,它不参与以后的比较和交换操作;第二轮排序:第一个数与第二个数进行比较,......直到完成第n-2个数与第n-1个数的比较;......第n-1轮排序:第一个数与第二个数进行比较,若符合所要求的顺序,则结束冒泡法排序;若不符合要求的顺序,则交换两者的位置,然后结束冒泡法排序。


共n-1轮排序处理,第j轮进行n-j次比较和至多n-j次交换。


从以上排序过程可以看出,较大的数像气泡一样向上冒,而较小的数往下沉,故称冒泡法。



public void bubbleSort(int a[])


{


int n = a.length;


for(int i=0;i<n-1;i++)


{


for(int j=0;j<n-i-1;j++)


{


if(a[j] > a[j+1])


{


int temp = a[j];


a[j] = a[j + 1];


a[j + 1] = temp;


}


}


}


}



2、选择排序



选择法的原理是先将第一个数与后面的每一个数依次比较,不断将将小的赋给第一个数,从而找出最小的,然后第二个数与后面的每一个数依次比较,从而找出第二小的,然后第三个数与后面的每一个数依次比较,从而找出第三小的.....直到找到最后一个数。


public void sort(int x[])


{


int n=x.length;


int k,t;


for(int i=0;i<n-1;i++)


{


k=i;


for(int j=i+1;j=n;j++)


{


if(x[j]>x[k])k=j;


if(k!=i)


{


t=x[i];


x[i]=x[k];


x[k]=t;


}


}


}


}


3、插入排序



插入排序的原理是对数组中的第i个元素,认为它前面的i-1个已经排序好,然后将它插入到前面的i-1个元素中。插入排序对少量元素的排序较为有效.



public void sort(int obj[])


{


for(int j=1;j<obj.length;j++)


{


int key=obj[j];


int i=j-1;


while(i>=0&&obj[i]>key)


{


obj[i+1]=obj[i];


i--;


}


obj[i+1]=key;


}


}



4、快速排序



快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此大道整个数据变成有序序列。



public void quickSort(int obj[],int low,int high)


{


int i=low;


int j=high;


int keyValue=obj[i];


while(i<j)


{


int temp=0;


while(i<j&&obj[j]>=keyValue)


{


j=j-1;


}


temp=obj[j];


obj[j]=obj[i];


obj[i]=temp;


while(i<j&&obj[i]<=keyValue)


{


i=i+1;


}


temp=obj[j];


obj[j]=ojb[i];


obj[i]=temp;


}


obj[i]=keyValue;


if(low<i-1)


{


quickSort(obj,low,i-1);


}


if(high>i+1)


{


quickSort(obj,i+1,high);


}


}



~

ava的大方向是什么
答:ava的大方向就是j2eej2ee不仅仅是socket编程,具体包括13中核心技术J2EE的核心API与组J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的13种技术规范进行简单的描述(限于篇幅,这里只能进行简单的描述):方法/步骤 1.JDBC(Java...

万用表上AVA ACV DCV VDC 代表什么(有的电容什么的)
答:现在常见的三极管大部分是塑封的,如何准确判断三极管的三只引脚哪个是b、c、e?三极管的b极很容易测出来,但怎么断定哪个是c哪个是e?这里推荐三种方法:第一种方法:对于有测三极管hFE插孔的指针表,先测出b极后,将三极管随意插到插孔中去(当然b极是可以插准确的),测一下hFE值,然后再将管子倒过来再测一遍,测得hFE...

JAVA是什么意思?
答:2.object类定义的所有的方法(toString equals) 30.数据类型:Java是强调类型的语言,每个变量都必须先申明它都类型,java中总共有8个基本类型.4种是整型,2种是浮点型,一种是字符型,被用于Unicode编码中的字符,布尔型。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 狮子慌了 2016-03-17 · 知道合伙...

请问AVA中FN-FNC如何改装为最佳?
答:1.枪管——专业的那个,加2准1速的 2.扳机——用-1速加2稳的 3.握把——重型握把,加1稳-1动的 最后效果加2准加3稳减1机动。 我不喜欢楼上的减1速减1准的改法,射速在近战还是很有用的.1准对远战也是有用的 我的改法近可扫,远可点,...

AVA中哪些GP枪好 三个兵种都要 要老兵,要自己的见解!
答:良好的稳定性以及射速、回复率。其他的武器在这个超级赛亚人(金币党)和黑客帝国(GB党)横行的时代显得苍白无力改良武器具有良好的稳定性,但是伤害却让人难以接受,甚至会有种匪夷所思的感觉,当一个穿个金币套装的超级赛亚人出现在你面前的时候,即使你手中的改良M4点中他胸口1枪,他也足以将用激光...

学习java需要什么基础?
答:2、熟练运用java面向对象知识进行程序开发;3、对java的核心对象和组件有深入理解;4、熟练运用javaAPI相关知识;5、熟练应用java多线程技术;6、能综合运用所学知识完成一个项目。知识点:1、基本数据类型,运算符,数组,掌握基本数据类型转换,运算符,流程控制;2、数组,排序算法,java常用API,类和...

AVA喷子怎么用威力最大
答:LZ你好,建议用蓝色的那把喷子,貌似叫蓝骷髅吧。。威力大,近距离几乎一枪一个。。用法很简单,霰弹枪都是贴着墙用,听声音,辨别敌人方位,善于看雷达。。

flash怎么制作轮播图片素材flash怎么制作轮播图片素材视频
答:3.常见排序算法 ●1.冒泡排序、优化 ●2.选择排序 ●3.插入排序 ●4.归并排序 ●5.快速排序式 ●6.计数排序 ●7.桶排序 ●8.基数排序 4.链表(链表反转、链表是否有环) 5.树(高度、前序、中序、后序、广度优先算法、反转) 6.二叉树搜索算法 7.青蛙跳台阶问题-动态规划算法 8.React虚拟DOMDiff算法实现...

java学习作为一名java初学者,如何快速学习j
答:JAVA快速入门的方法:1、时刻提醒自己Java是一种OOP语言工具,而不仅仅是编码,只有这样才能总体把握和运用Java。2、在学习的过程中,最好能够【了解Java】的底层机制,而不是仅仅停留在表层,不是抄书上的例子运行出结果就可以。要注意,即便对一个简单的例子也要有耐心去琢磨、调试、改动。3、在学习的...

CF的AK再移动射击中如何能让准心不变,主要是在移动中准信只是是小的 就...
答:工欲善其事必先利其器,Hang教你玩akak47呢在以往的fps游戏中都是以威力大和后座力大而著称的,在ava中也不例外,今天Hang就给大家讲解一下在ava中如何驾驭ak47对于ak47的使用方法呢,我用五个字来概括:点、拉、扫、甩、泼。这五个字概括了ak47的五种射击方法,我们切叫他ak的五字真言。1、...