Java中八大排序算法是什么


这篇文章将为大家详细讲解有关Java中八大排序算法是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基本思想:将新的数据插入已经排好的数据列中。将第一个和第二个数排序,构成有序数列然后将第三个数插进去,构成新的有序数列,后面的数重复这个步骤算法描述1、设定插入的次数,即是循环次数,for(int i=1;i

2、设定免费云主机域名插入的数和得到的已经排好的序列的最后一个数,insertNum和j=i-1。

3、从最后一个数向前开始循环,如果插入数小于当前数就将当前数向前移动一位

4、将当前位置放置到空的位置,即j+1。

代码实现

publicclassDemo01{
publicstaticvoidmain(String[]args){
int[]data={2,1,41,21,14,33,5};
inttemp;//要插入的数
for(inti=1;i=0&&data[j]>temp){//判断后一个数,将大于要插入的数向后移动一格
data[j+1]=data[j];//元素移动一格
j--;
}
data[j+1]=temp;//将要插入的数字放入1插入的位置
}
for(inti=0;i

二、希尔排序

基本思想

对于直接插入的数,数据量巨大:

1.将数的个数设置为n,取奇数k = n/2,将下标的差值k的数分为一组,构成有序数列。

2.再取k = k/2,将下标差值为k的数构成一组,构成有序数列,

3.重复第二步,直到k=1执行简单的插入排序

算法描述

1.首先确定分组的数字

2.然后对组中的数字进行插入排序

3.然后将length/2,重复1,2步骤。直到length=0为止。

代码实现

publicclassDemo02{
publicstaticvoidmain(String[]args){
int[]data={2,5,14,34,12,4,87,21,1,6};
intd=data.length;
while(d!=0){
d=d/2;
for(intx=0;x=0&&temp

三、简单选择排序

基本思想

常用于取序列数中最大最小的几棵树

(如果每次比较都交换,那么就是交换排序;如果每次比较完一个循环再交换,就是简单选择排序。)

1.遍历整个序列,将最小的数放在最前面

2.遍历剩余的序列,将最小的数字放在最前面

3.重复步骤2,知道剩余最后一个数字。

算法描述

1.首先确定循环次数,并且记住当前的位置和当前数字

2.将当前位置后面的所有数字和当前位置的数字作比较,小数赋值给key,并记住小值的位置

3.比对完成后,将最小的值和第一个数的值交换

4.重复2,3步骤

代码实现

publicclassDemo03{
publicstaticvoidmain(String[]args){
int[]data={2,6,123,56,23,1};
for(inti=0;i

四、堆排序

基本思想:

对简单选择排序的优化

1.将序列构建为大顶堆

2.将根节点与最后一个节点兑换,然后断开最后一个节点

3.重复一二步骤,直到所有节点断开

代码实现:

publicclassDemo04{
publicstaticvoidmain(String[]args){
int[]data={21,13,3,2,1,23,11,25};
heapsort(data);
}
publicstaticvoidheapsort(inta[]){
System.out.println("开始排序");
intarrayLength=a.length;
for(inti=0;i=0;i--){
//k保存当前判断的节点
intk=i;
//如果当前k节点存在子节点
while(k*2+1

五、冒泡排序

基本思想

1.将序列中所有的元素两两比较

2.将剩余序列的所有元素两两比较,将最大的放到最后面

3.重复第二步,知道最后一个数

算法描述

1.设置循环次数

2.设置比较的位数和结束的位数

3.两两比较,将最小的放到前面去

4.重复2,3步骤,直到循环结束

代码实现

publicclassDemo05{
publicstaticvoidmain(String[]args){
int[]data={1,34,31,2,65,87,255,8,33,64,3};
inttemp;
for(inti=0;idata[j+1]){
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
}
}
for(inti=0;i

六、快速排序

基本思想

要求时间最快

1.选择第一个数作为P,小于P的放左边,大于p的放右边

2.递归将p的左边和右边的数按照步骤一进行,直到不能递归

代码实现

publicclassDemo06{
publicstaticvoidmain(String[]args){
int[]data={5,33,22,11,23,2,32,12,21,10};
quickSort(data,0,data.length-1);
sorts(data);
}
publicstaticvoidquickSort(int[]data,intL,intR){
if(Lbase&&(right>L)){
right--;
}
if(leftleft){
quickSort(data,left,R);
}
}
}
publicstaticvoidsorts(int[]data){
for(inti=0;i

七、归并排序

基本思想

速度仅次于快排,内存少的时候使用,可以进行并行运算的时候使用。

1.选择相邻两个数组成的有序序列

2.选择相邻的两个有序序列组成的一个有序序列

3.重复步骤二,直到组成一个有序序列

publicclassDemo0701{
publicstaticvoidmain(String[]args){
int[]arr={12,34,3,2,13,43,34,25,83};
mSort(arr,0,arr.length-1);
sorts(arr);
}

/**
*递归分治
*@paramarr待排数组
*@paramleft左指针
*@paramright右指针
*/
publicstaticvoidmSort(int[]arr,intleft,intright){
if(left>=right)
return;
intmid=(left+right)/2;

mSort(arr,left,mid);//递归排序左边
mSort(arr,mid+1,right);//递归排序右边
merge(arr,left,mid,right);//合并
}

/**
*合并两个有序数组
*@paramarr待合并数组
*@paramleft左指针
*@parammid中间指针
*@paramright右指针
*/
publicstaticvoidmerge(int[]arr,intleft,intmid,intright){
//[left,mid][mid+1,right]
int[]temp=newint[right-left+1];//中间数组
inti=left;
intj=mid+1;
intk=0;

//执行完这个while循环,相当于将两个子序列合并后重新进行了一次排序并将排序结果记录在了临时数组temp[k]中。
//while走完后k的值等于数组的长度,i的值此时大于mid,j的值大于right
while(i

八、基数排序(桶排序)

基本思想

用于大量数,很长数进行排列

1.将所有的数的个数取出来,按照个位数排序,构成序列

2.将新构成的所有数的十位数取出,按照十位数进行排序

代码实现

publicclassDemo08{
publicstaticvoidmain(String[]args){
int[]data={12,34,3,2,13,43,34,25,83};
if(data==null&&data.length==0)
return;

intmaxBit=getMaxBit(data);


for(inti=1;i>buf=distribute(data,i);//分配
collecte(data,buf);//收集
}
newPrintSort(data);
}

/**
*分配
*@paramarr待分配数组
*@paramiBit要分配第几位
*@return
*/
publicstaticList>distribute(int[]arr,intiBit){
List>buf=newArrayList>();
for(intj=0;j());
}
for(inti=0;i>buf){
intk=0;
for(Listbucket:buf){
for(intele:bucket){
arr[k++]=ele;
}
}


}

/**
*获取最大位数
*@param
*@return
*/
publicstaticintgetMaxBit(int[]arr){
intmax=Integer.MIN_VALUE;
for(intele:arr){
intlen=(ele+"").length();
if(len>max)
max=len;
}
returnmax;
}

/**
*获取x的第n位,如果没有则为0.
*@paramx
*@paramn
*@return
*/
publicstaticintgetNBit(intx,intn){
Stringsx=x+"";
if(sx.length()

关于“Java中八大排序算法是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

2、设定插入的数和得到的已经排好的序列的最后一个数,insertNum和j=i-1。3、从最后一个数向前开始循环,如果插入数小于当前数就将当前数向前移动一位4、将当前位置放置到空的位置,即j+1。代码实现基本思想:对于直接插入的数,数据量巨大:1.将数的个数设置为n,取奇数k = n/2,将下标的差值k的数分为一组,构成有序数列。2.再取k = k/2,将下标差值为k的数构成一组,构成有序数列,3.重复第二步,直到k=1执行简单的插入排序算法描述1.首先确定分组的数字2.然后对组中的数字进行插入排序3.然后将length/2,重复1,2步骤。直到length=0为止。代码实现基本思想:常用于取序列数中最大最小的几棵树(如果每次比较都交换,那么就是交换排序;如果每次比较完一个循环再交换,就是简单选择排序。)1.遍历整个序列,将最小的数放在最前面2.遍历剩余的序列,将最小的数字放在最前面3.重复步骤2,知道剩余最后一个数字。算法描述1.首先确定循环次数,并且记住当前的位置和当前数字2.将当前位置后面的所有数字和当前位置的数字作比较,小数赋值给key,并记住小值的位置3.比对完成后,将最小的值和第一个数的值交换4.重复2,3步骤代码实现基本思想:对简单选择排序的优化1.将序列构建为大顶堆2.将根节点与最后一个节点兑换,然后断开最后一个节点3.重复一二步骤,直到所有节点断开代码实现:基本思想1.将序列中所有的元素两两比较2.将剩余序列的所有元素两两比较,将最大的放到最后面3.重复第二步,知道最后一个数算法描述1.设置循环次数2.设置比较的位数和结束的位数3.两两比较,将最小的放到前面去4.重复2,3步骤,直到循环结束代码实现基本思想要求时间最快1.选择第一个数作为P,小于P的放左边,大于p的放右边2.递归将p的左边和右边的数按照步骤一进行,直到不能递归代码实现基本思想速度仅次于快排,内存少的时候使用,可以进行并行运算的时候使用。1.选择相邻两个数组成的有序序列2.选择相邻的两个有序序列组成的一个有序序列3.重复步骤二,直到组成一个有序序列基本思想用于大量数,很长数进行排列1.将所有的数的个数取出来,按照个位数排序,构成序列2.将新构成的所有数的十位数取出,按照十位数进行排序代码实现关于“Java中八大排序算法是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

相关推荐: 淘客小程序如何制作

今天小编给大家分享一下淘客小程序如何制作的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。   第一步:你得先申请1个微信小程序并认证(未认证不能上…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/08 17:23
下一篇 09/08 17:45

相关推荐