排序算法总的来说有8种,冒泡排序是最基础的排序算法之一。
原理:
两层循环,外轮冒泡轮数,里层依次比较,时间复杂度O(n^2)。
-
比较数组中两相邻元素,如果第一个数比第二个数大,则交换他们的位置
-
每次比较,都会产生一个最小会最大的数
-
下一轮则可以减少一次排序
-
依次循环,直到结束
package Java数组;
import java.util.Arrays;
public class Demo07 {
public static void main(String[] args) {
int[] a = {12,25,7,9,2,30,1};
//int[] a = {7,6,5,4,3,2,1};
int[] b = bubllesort(a);
System.out.println(Arrays.toString(b));
}
public static int[] bubllesort(int[] array){
int temp = 0; //临时变量,数据交换位置时使用
//第一层循环,控制轮数
for(int i=0; i<array.length-1; i++){
//第二层循环,每次从头开始将相邻的两个数两两比较,较大的数往后移动一位,因此每一轮结束后最后一个位置已经是排好序的数了,且是最大数
for (int j=0; j<array.length-1-i; j++){
//判断大小,交换位置
if(array[j+1]<array[j]) {
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag = true;
}
}
}
return array;
}
}
输出结果:
[1, 2, 7, 9, 12, 25, 30]
优化:
一个简单的优化
package Java数组;
import java.util.Arrays;
public class Demo07 {
public static void main(String[] args) {
//int[] a = {12,25,7,9,2,30,1};
//int[] a = {7,6,5,4,3,2,1};
int[] a = {1, 2, 3, 4, 5, 7, 6};
int[] b = bubllesort(a);
System.out.println(Arrays.toString(b));
}
public static int[] bubllesort(int[] array) {
int temp = 0; //临时变量,数据交换位置时使用
//第一层循环,控制轮数
for (int i = 0; i < array.length - 1; i++) {
//设置一个flag变量判断是否这一轮已经是排好序的
boolean flag = false;
//第二层循环,每次从头开始将相邻的两个数两两比较,较大的数往后移动一位,因此每一轮结束后最后一个位置已经是排好序的数了,且是最大数
for (int j = 0; j < array.length - 1 - i; j++) {
//判断大小,交换位置
if (array[j + 1] < array[j]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = true;
}
}
//如果这一轮已经排好序,则flag仍会是false,则结束循环
if (flag == false) {
break;
}
}
return array;
}
}
输出结果:
[1, 2, 7, 9, 12, 25, 30]