java冒泡排序和选择排序详解

网友投稿 261 2022-10-14


java冒泡排序和选择排序详解

目录1、冒泡排序2、选择排序法总结

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

for(int j=0;j

if(arr[j+1]

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 eSuzQaFsn[]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

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

}

}

}

总结

本篇文章就到这里了,希望可以给你带来一些帮助,也希望您能够多多关注我们的更多内容!

for(int j=0;j

if(arr[j+1]

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 eSuzQaFsn[]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

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

}

}

}

总结

本篇文章就到这里了,希望可以给你带来一些帮助,也希望您能够多多关注我们的更多内容!

if(arr[j+1]

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 eSuzQaFsn[]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

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

}

}

}

总结

本篇文章就到这里了,希望可以给你带来一些帮助,也希望您能够多多关注我们的更多内容!

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 eSuzQaFsn[]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

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

}

}

}

总结

本篇文章就到这里了,希望可以给你带来一些帮助,也希望您能够多多关注我们的更多内容!

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

}

}

}

总结

本篇文章就到这里了,希望可以给你带来一些帮助,也希望您能够多多关注我们的更多内容!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网络层协议与应用Ping命令与ICMP/ARP协议
下一篇:传输层TCP和UDP协议,TCP的三次握手和四次挥手
相关文章

 发表评论

暂时没有评论,来抢沙发吧~