冒泡排序
一、排序:将一组数据按照固定的规则进行排列
二、冒泡排序:一种排序方式,对要进行排序的数据进行两两比较,将较大的数据放在后面,依次对所用的数据进行操作,直到所有数据按要求完成排序
三、冒泡排序的特点:
- 若有n个数据进行排序,总共需要排序n-1次
- 每一次比较完毕后,下一次的比较就会少一个数据参与
四、下面讲解代码,此处使用的时候java
①代码如下:
public class ArrayDemo {
public static void main(String[] args) {
//定义一个数组
int[] arr = {24,69,80,57,13};
System.out.println("排序前:"+arrayToString(arr));
//第一次比较
for (int i = 0;i<arr.length-1-0;i++){
//此处减零是为了方便下一步简化代码,好找和下面三次比较的规律
//减一是因为arr[i+1]会溢出
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] =temp;
}
}
System.out.println("第一次比较后:"+arrayToString(arr));
//第二次比较
for (int i = 0;i<arr.length-1-1;i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] =temp;
}
}
System.out.println("第二次比较后:"+arrayToString(arr));
//第三次比较
for (int i = 0;i<arr.length-1-2;i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] =temp;
}
}
System.out.println("第三次比较后:"+arrayToString(arr));
//第四次比较
for (int i = 0;i<arr.length-1-3;i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] =temp;
}
}
System.out.println("第四次比较后:"+arrayToString(arr));
//把数组中的元素按照指定的规则组成一个字符串:[元素1,元素2,...]
public static String arrayToString(int[] arr){
StringBuilder sb = new StringBuilder();
//StringBuilder是一个可变的字符串,可以将其看成是一个容器
sb.append("[");//添加数据,并返回对象本身
for (int i=0;i<arr.length;i++){
if (i==arr.length-1){
sb.append(arr[i]);
}else{
sb.append(arr[i]).append(",");
}
}
sb.append("]");
String s=sb.toString();
//toString()方法可以把StringBuilder转化为String
return s;
}
}
说明:
上面代码中是列举了一个数组,其中为5个数据,每次通过比较相邻的个数据进行比较,将最大的数据放在其后。 其中,数据有5个,所以只需排序4次即可。每次排序完最后一个数据都不会参与下一次的比较,所以每次比较的数据都会比上一次的数据少一。
在次讲解一下arrayToString()这个放方法,在这个方法中是将数组终端元素注组成一个字符串,先是将其定义为StringBuilder,然后在用toString()方法将StringBuilder转化为String,并且最后将其输出。
②简化代码
我们可以把上面的4次排序进行整合,简化代码,而简化的代码如下:
for (int x= 0; x<arr.length-1;x++){
for (int i = 0;i<arr.length-1-x;i++){
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] =temp;
}
}
}
System.out.println("排序后:"+arrayToString(arr));
}
将次段代码代替上面代码的4次比较,整合后运行结果如下:
③最终代码
上面我们为了方便讲解,直接定义了一个数组。下面我们直接从控制台输入一个数组,让其进行冒泡排序。
import java.util.Scanner;
/*
冒泡排序
*/
public class ArrayDemo {
public static void main(String[] args) {
//从控制台输入数组
Scanner sc = new Scanner(System.in);
System.out.println("请输入总共的数据为:");
int x = sc.nextInt();
int[] arr = new int[x];
for (int i = 0;i<x; i++){
System.out.println("请输入数据:");
arr[i]=sc.nextInt();
}
System.out.println("排序前:"+arrayToString(arr));
bubbleSorting(arr);
}
//把数组中的元素按照指定的规则组成一个字符串:[元素1,元素2,...]
public static String arrayToString(int[] arr){
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i=0;i<arr.length;i++){
if (i == arr.length-1){
sb.append(arr[i]);
}else{
sb.append(arr[i]).append(",");
}
}
sb.append("]");
String s = sb.toString();
return s;
}
//冒泡排序的方法
public static void bubbleSorting(int[] arr){
for (int i= 0;i<arr.length-1;i++){
for (int j =0;j<arr.length-1-i;j++){
if (arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] =arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println("排序后:"+arrayToString(arr));
}
}
以上就是冒泡排序的相关的讲解。