首页编程java编程java什么排序方法最快(java排序,效率高的是哪种排序方法)

java什么排序方法最快(java排序,效率高的是哪种排序方法)

编程之家2023-10-13105次浏览

大家好,关于java什么排序方法最快很多朋友都还不太明白,今天小编就来为大家分享关于java排序,效率高的是哪种排序方法的知识,希望对各位有所帮助!

java什么排序方法最快(java排序,效率高的是哪种排序方法)

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

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

1、冒泡排序

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

java什么排序方法最快(java排序,效率高的是哪种排序方法)

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

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

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

java什么排序方法最快(java排序,效率高的是哪种排序方法)

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);

}

}

java排序,效率高的是哪种排序方法

和所有其他语言是一样的。应该还是快速排序效率最高。

public static void bubbleSort(int a[]){

int len= a.length;

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

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

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

int temp= a[j];

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

a[j+ 1]= temp;

}

}

}

}

public static void selectSort(int a[]){

int temp= 0;

int len= a.length;

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

int min= a[i];

int index= i;

for(int j= i+ 1; j< len; j++){

if(min> a[j]){

min= a[j];

index= j;

}

}

temp= a[i];

a[i]= a[index];

a[index]= temp;

}

}

public static void insertSort(int a[]){

int len= a.length;

for(int i= 1; i< len; i++){

int temp= a[i];//待插入的值

int index= i;//待插入的位置

while(index> 0&& a[index- 1]> temp){

a[index]= a[index- 1];//待插入的位置重新赋更大的值

index--;//位置往前移

}

a[index]= temp;

}

}

public static int partition(int a[], int low, int height){

int key= a[low];

while(low< height){

while(low< height&& a[height]>= key)

height--;

a[low]= a[height];

while(low< height&& a[low]<= key)

low++;

a[height]= a[low];

}

a[low]= key;

return low;

}

public static void quickSort(int a[], int low, int height){

if(low< height){

int result= partition(a, low, height);

quickSort(a, low, result- 1);

quickSort(a, result+ 1, height);

}

}

测试结果

------------------------------------------

测试数据10000

冒泡排序:120ms

选择排序:32ms

插入排序:20ms

快速排序:7ms

------------------------------------------

测试数据100000

冒泡排序:13098ms

选择排序:2334ms

插入排序:1264ms

快速排序:23ms

效率差距很大啊!!!!

java里,几种排序方法各有什么优缺点

一、冒泡排序

已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较 a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对 a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。

优点:稳定;

缺点:慢,每次只能移动相邻两个数据。

二、选择排序

冒泡排序的改进版。

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

选择排序是不稳定的排序方法。

n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:

①初始状态:无序区为R[1..n],有序区为空。

②第1趟排序

在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

……

③第i趟排序

第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n- 1)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。

优点:移动数据的次数已知(n-1次);

缺点:比较次数多。

三、插入排序

已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、 b[2]、……b[m],需将二者合并成一个升序数列。首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来 a[x]的位置这就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若无数组a,可将b[1]当作n=1的数组a)

优点:稳定,快;

缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。

三、缩小增量排序

由希尔在1959年提出,又称希尔排序(shell排序)。

已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。发现当n不大时,插入排序的效果很好。首先取一增量d(d<n),将a[1]、a[1+d]、a[1+2d]……列为第一组,a[2]、a[2+d]、 a[2+2d]……列为第二组……,a[d]、a[2d]、a[3d]……列为最后一组以次类推,在各组内用插入排序,然后取d'<d,重复上述操作,直到d=1。

优点:快,数据移动少;

缺点:不稳定,d的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取。

四、快速排序

快速排序是目前已知的最快的排序方法。

已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先任取数据 a[x]作为基准。比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据<a[x],a[k+1]~a[n]中的每一个数据>a[x],然后采用分治的策略分别对a[1]~a[k-1]和a[k+1]~a[n]两组数据进行快速排序。

优点:极快,数据移动少;

缺点:不稳定。

五、箱排序

已知一组无序正整数数据a[1]、a[2]、……a[n],需将其按升序排列。首先定义一个数组x[m],且m>=a[1]、a[2]、……a[n],接着循环n次,每次x[a]++.

优点:快,效率达到O(1)

缺点:数据范围必须为正整数并且比较小

六、归并排序

归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。最简单的归并是直接将两个有序的子表合并成一个有序的表。

归并排序是稳定的排序.即相等的元素的顺序不会改变.如输入记录 1(1) 3(2) 2(3) 2(4) 5(5)(括号中是记录的关键字)时输出的 1(1) 2(3) 2(4) 3(2) 5(5)中的2和 2是按输入的顺序.这对要排序数据包含多个信息而要按其中的某一个信息排序,要求其它信息尽量按输入的顺序排列时很重要.这也是它比快速排序优势的地方.

java什么排序方法最快和java排序,效率高的是哪种排序方法的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

java类图in 是什么意思?java uml类图中,二维数组怎么表示算数据域还是方法泰安的大学 泰安的大学排名一览表