java冒泡排序和选择排序详解
1、冒泡排序
冒泡排序(Bubble Sorting)的基本思想是:通过对待
排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下
来没有进行过交换,就说明序列有序。
图解冒泡排序算法的过程
原始数组:3, 9, -1, 10, 20
第一趟排序
(1) 3, 9, -1, 10, 20 // 如果相邻的元素逆序就交换
(2) 3, -1, 9, 10, 20
(3) 3, -1, 9, 10, 20
(4) 3, -1, 9, 10, 20
第二趟排序
(1) -1, 3, 9, 10, 20 //交换
(2) -1, 3, 9, 10, 20
(3) -1, 3, 9, 10, 20
第三趟排序
(1) -1, 3, 9, 10, 20
(2) -1, 3, 9, 10, 20
第四趟排序
(1) -1, 3, 9, 10, 20
小结冒泡排序规则
(1) 一共进行 数组的大小-1 次 大的循环
(2)每一趟排序的次数在逐渐的减少
(3) 如果我们发现在某趟排序中,没有发生一次交换, 可以提前结束冒泡排序。这个就是优化
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]= {3,9,-1,10,-2};
//第i+1趟排序,将最大的数排在最后
int temp=0;//临时变量
for(int i=0;i<arr.length-1;i++) {//定义第几轮排序
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j+1]<arr[j]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
System.out.println("输出第"+(i+1)+"趟排序的结果");
System.out.println(Arrays.toString(arr));
}
}
}
运行结果:
输出第1趟排序的结果
[3, -1, 9, -2, 10]
输出第2趟排序的结果
[-1, 3, -2, 9, 10]
输出第3趟排序的结果
[-1, -2, 3, 9, 10]
输出第4趟排序的结果
[-2, -1, 3, 9, 10]
2、选择排序法
排序思路:
原始的数组 : 101, 34, 119, 1
第一轮排序 : 1, 34, 119, 101
第二轮排序 : 1, 34, 119, 101
第三轮排序 : 1, 34, 101, 119
说明:
1.选择排序一共有 数组大小 - 1 轮排序
2.每1轮排序,又是一个循环, 循环的规则(代码)
- 2.1先假定当前这个数是最小数
- 2.2 然后和后面的每个数进行比较,如果发现有比当前数更小的数,就重新确定最小数,并得到下标
- 2.3 当遍历到数组的最后时,就得到本轮最小数和下标
- 2.4 交换 [代码中再继续说 ]
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
//int []arr={ 8,3,2,1,7,4,6,5};
int [] arr={101,34,109,1};
quicksort(arr);
}
public static void quicksort(int []arr){
for(int j=0;j<arr.length-1;j++) {
int minindex=j;//假定当前下标为最小值下标
int minnumber=arr[j];//假定当前元素为最小值
for (int i = 1+j; i < arr.length; i++) {
if (arr[i] < minnumber) {//若假定最小值并不是最小的
minnumber = arr[i];//重置minnumber
minindex = i;//重置minindex
}
}
//将最小值交换
arr[minindex] = arr[j];
arr[j] = minnumber;
System.out.println("第"+(j+1)+"轮");
System.out.println(Arrays.toString(arr));
}
}
}
总结
本篇文章就到这里了,希望可以给你带来一些帮助,也希望您能够多多关注脚本之家的更多内容!
相关文章
SSH框架网上商城项目第16战之Hibernate二级缓存处理首页热门显示
这篇文章主要介绍了SSH框架网上商城项目第16战之Hibernate的二级缓存处理首页的热门显示,感兴趣的小伙伴们可以参考一下2016-06-06
Springboot集成MongoDB无认证与开启认证的配置方式
本文主要介绍了Springboot集成MongoDB无认证与开启认证的配置方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-03-03
idea debug没有force step into的问题解决
本文主要介绍了IDEA Debug中ForceStepInto按钮消失的问题及解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-10-10
详解SpringBoot注册Windows服务和启动报错的原因
这篇文章主要介绍了详解SpringBoot注册Windows服务和启动报错的原因,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-03-03
IntelliJ IDEA(或者JetBrains PyCharm)中弹出"IntelliJ IDEA License
今天小编就为大家分享一篇关于IntelliJ IDEA(或者JetBrains PyCharm)中弹出"IntelliJ IDEA License Activation"的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2018-10-10


最新评论