冒泡排序 冒泡排序,就是你水泡一样,往上冒,直接上图解释吧!
这里排的是从小到大,当然,也可以从大到小。 也就是说,第一次排序,一定是把最大值找到了最右边,第二次排序,把剩下的元素里,找出最大值排到右边。因此每排序一次,就少比较一次。 代码实现如下: - <font color="rgb(85, 85, 85)">public class Demo{
- public static void main(String[] args){
-
- //搞个数组
- int[] arrays = new int[]{23,11,9,89,120,230};
-
- //排序前输出
- printArrays(arrays);
-
- //冒泡排序
- maopaoSort(arrays);
-
- //排序后输出
- System.out.println("最后结果:");
- printArrays(arrays);
- }
- public static void maopaoSort(int[] arrays){
- for(int i = 0;i<arrays.length;i++){
- System.out.println("第"+i+"次排序");
- printArrays(arrays);
- for(int j = 0;j<arrays.length-i-1;j++){
- if(arrays[j]>arrays[j+1]){//从小到大
- int temp = arrays[j];
- arrays[j] = arrays[j+1];
- arrays[j+1] = temp;
- }
- }
- }
- }
- //数组输出方法
- public static void printArrays(int[] arrays){
- System.out.print("[");
- for(int i = 0;i<arrays.length;i++){
- if(i!=arrays.length-1){
- System.out.print(arrays[i]+",");
- }else{
- System.out.println(arrays[i]+"]");
- }
- }
- }
- }</font>
复制代码
结果如下: [23,11,9,89,120,230]
第0次排序
[23,11,9,89,120,230]
第1次排序
[11,9,23,89,120,230]
第2次排序
[9,11,23,89,120,230]
第3次排序
[9,11,23,89,120,230]
第4次排序
[9,11,23,89,120,230]
第5次排序
[9,11,23,89,120,230]
最后结果:
[9,11,23,89,120,230]
相信到这里,你已经懂得了什么 是冒泡排序,赶快动手写写吧,你一定可以做到的! 选择排序选择排序,是选择出一个元素,然后跟所有的元素逐个比较,根据条件进行切换。
代码体现(这里排列从小到大) - <font color="rgb(85, 85, 85)">public class Demo{
- public static void main(String[] args){
-
- //弄一个数组
- int[] arrays = new int[]{12,34,89,10,8};
-
- //排序前先输出一次
- printArrays(arrays);
-
- //进行排序
- chooseSort(arrays);//我不知道选择是不是这样写的,嘻嘻!我只会说,不会写英语。
-
- //排序前先输出一次
- System.out.println("排序后的结果:");
- printArrays(arrays);
-
- }
- //选择排序
- public static void chooseSort(int[] arrays){
- for(int i = 0;i<arrays.length;i++){
- System.out.println("第"+i+"次排序结果:");
- printArrays(arrays);
- for(int j = i;j<arrays.length-1;j++){
- if(arrays[i]>arrays[j+1]){
- int temp = arrays[i];
- arrays[i] = arrays[j+1];
- arrays[j+1] = temp;
- }
- }
- }
- }
- //打印数组的函数
- public static void printArrays(int[] arrays){
- System.out.print("[");
- for(int i = 0;i<arrays.length;i++){
- if(i!=arrays.length-1){
- System.out.print(arrays[i]+",");
- }else{
- System.out.println(arrays[i]+"]");
- }
- }
- }
- }</font>
复制代码
把结果和图片对象一下吧,我画得很辛苦的,一个字,累呀!只希望大家理解了冒泡和选择排序! 运行结果: [12,34,89,10,8]
第0次排序结果:
[12,34,89,10,8]
第1次排序结果:
[8,34,89,12,10]
第2次排序结果:
[8,10,89,34,12]
第3次排序结果:
[8,10,12,89,34]
第4次排序结果:
[8,10,12,34,89]
排序后的结果:
[8,10,12,34,89] 好啦,排序就讲到这里啦,另外扯淡一个东西,就是交换元素的方法。 交换元素在上面的代码中,交换元素主要用了第三方的变量来暂时存放一下。那么有不有不借助第三方变量来交换两个元素的呢?答案是有的哈! 1、通过加减法来交换,但是这种交换有弊端,什么弊端呢,就是这个要是数太大了,超出int的范围了,那就不可以了。 - <font color="rgb(85, 85, 85)">public class Demo{
- public static void main(String[] args){
-
- //交换两个数
- int x = 8,y = 10;
-
- //方法一:
- x = x + y;
- y = x - y;
- x = x -y;
-
- System.out.println("x = "+x+","+"y="+y);
- }
- }</font>
复制代码
2、通过位操作来交换两个数
- <font color="rgb(85, 85, 85)">
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- public class Demo{
- public static void main(String[] args){
-
- //交换两个数
- int a = 8,b = 10;
-
- //方法二:
- a = a^b;
- b = a^b;
- a = a^b;
-
- System.out.println("a = "+a+","+"b="+b);
- }
- }</font>
复制代码
3、通过第三方变量来交换(略),嘻嘻! 好啦,这个排序到此结束,当然还有比较多的排序方法,比如说,插入排序,归并排序,希尔排序,堆排序,恶心多了!
请各路英雄指教!
|