JAVA 十种内部排序实现(选择 冒泡 插入 希尔 堆 归并 快速 基数 计数 桶)及代码

时间:2026-01-14

1.选择排序

2.冒泡排序

3.插入排序

4.希尔排序

5.堆排序

6.归并排序

7.快速排序

8.基数排序

9.计数排序

10.桶排序

1.选择排序

这个排序方法最简单,废话不多说,直接上代码:

public class SelectSort{

/**

*选择排序

*思路:每次循环得到最小值的下标,然后交换数据。

*如果交换的位置不等于原来的位置,则不交换。

*/

public static void main(String[]args){ selectSort(Datas.data);

Datas.prints("选择排序");

}

public static void selectSort(int[]data){ int index=0;

for(int i=0;i<data.length;i++){

index=i;

for(int j=i;j<data.length;j++){

if(data[index]>data[j]){

index=j;

}

}

if(index!=i){

swap(data,index,i);

}

}

}

public static void swap(int[]data,int i,int j){ int temp=data[i];

data[i]=data[j];

data[j]=temp;

}

}

选择排序两层循环,第一个层循环遍历数组,第二层循环找到剩余元素中最小值的索引,内层循环结束,交换数据。内层循环每结束一次,排好一位数据。两层循环结束,数据排好有序。

2冒泡排序

冒泡排序也简单,上代码先:

public class BubbleSort{

/**

*冒泡排序

*思路:内部循环每走一趟排好一位,依次向后排序

*/

public static void main(String[]args){

bubbleSort(Datas.data);

}

private static void bubbleSort(int[]data){ int temp;

for(int i=0;i<data.length;i++){

for(int j=i+1;j<data.length;j++){

if(data[i]>data[j]){

temp=data[i];

data[i]=data[j];

data[j]=temp;

}

}

}

Datas.prints("冒泡排序");

}

}

冒泡排序和选择排序有点像,两层循环,内层循环每结束一次,排好一位数据。不同的是,数据像冒泡一样,不断的移动位置,内层循环结束,刚好移动到排序的位置。

该图对应上面的代码进行的说明,没有用专门的画图工具,使用的是window的maspint,大家凑合着看哈^_^明白意思就成!

3插入排序

插入排序也是简单的排序方法,代码量不多,先看代码:

public class InsertSort{

/**

*插入排序

*思路:将数据插入到已排序的数组中。

*/

public static void main(String[]args){

int[]data=Datas.data;

int temp;

for(int i=1;i<data.length;i++){

temp=data[i];//保存待插入的数值

int j=i;

for(;j>0&&temp<data[j-1];j--){

data[j]=data[j-1];

//如果带插入的数值前面的元素比该值大,就向后移动一位}

//内部循环结束,找到插入的位置赋值即可。

data[j]=temp;

}

Datas.prints("插入排序");

}

}

该图是上面插入排序的说明图,插入排序,其过程就是其名字说明的一样,将待排序的数据插入到已排序的数据当中。两层循环,内层循环结束一次,插入排序排好一位数据。

4希尔排序

希尔排序,也叫缩减增量排序,其中增量的设置影响着程序的性能。最好的增量的设置为1,

3,5,7,11,。。。这样一组素数,并且各个元素之间没有公因子。这样的一组增量叫

做Hibbard增量。使用这种增量的希尔排序的最坏清醒运行时间为θ()

当不使用这种增量时,希尔排序的最坏情形运行时间为θ()

这里电脑打印这些太麻烦,干脆手写拍照啦哈哈哈哈。。。。。

好了,废话不多说,上代码;

public class ShellSort{

/**

*希尔排序(缩减增量排序)

*想想也不难。

*思路:三层循环

*第一层循环:控制增量-增量随着程序的进行依次递减一半

*第二层循环:遍历数组

*第三层循环:比较元素,交换元素。

*这里需要注意的是:比较的两个元素和交换的两个元素是不同的。

*/

public static void main(String[]args){

int[]data=Datas.data;

int k;

for(int div=data.length/2;div>0;div/=2){

for(int j=div;j<data.length;j++){

int temp=data[j];

for(k=j;k>=div&&temp<data[k-div];k-=div) {

data[k]=data[k-div];

}

data[k]=temp;

}

}

Datas.prints("希尔排序");

}

}

程序中,需要注意的是第三层循环,第三层循环的代码中,if语句的比较和内部的交换是分别不同的两个数据。原因是:把大的数据后移,小的数据前移,形成这样一种趋势,才能实现排序。

当然可以试试,if语句比较的两个数据和内部移动的数据一致的话,会出现什么问题?出现的问题就是移动的数据打破了之前形成的大的数据在后,小的数据在前的趋势。无法排序。5堆排序

堆排序,要知道什么是堆?说白了,堆就是完全二叉树,堆是优先队列。要求父元素比两个子元素要大。这就好办了。数组元素构建堆,根节点最大,删除根节点得到最大值,剩下的

元素再次构建堆,接着再删除根节点,得到第二大元素,剩下的元素再次构建堆,依次类推,得到一组排好序的数据。为了更好地利用空间,我们把删除的元素不使用新的空间,而是使用堆的最后一位保存删除的数据。

代码上来:

public class HeapSort{

/**

*堆排序(就是优先队列)

*也就是完全二叉树

*第一步:建堆.其实就是讲数组中的元素进行下虑操作,

*使得数组中的元素满 …… 此处隐藏:2226字,全部文档内容请下载后查看。喜欢就下载吧 ……

JAVA 十种内部排序实现(选择 冒泡 插入 希尔 堆 归并 快速 基数 计数 桶)及代码.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219