冒泡排序
- 总共有八大排序,冒泡排序无疑是最为出名的排序算法之一。
代码
- 冒泡排序的代码还是相当简单的。两层循环,外层冒泡轮数,里层一次比较,人尽皆知,家喻户晓。
import java.util.Arrays;
import java.util.Scanner;
public class amy04 {
public static void main(String[] args) {
int[] a = {1, 55, 66, 3, 4, 8, 9, 7, 77, 88, 99};
int [] sort=sort(a);//调用完自己写的排序方法后,返回一个排序后的数组
System.out.println(Arrays.toString(sort));
}
//冒泡排序
/* 1.比较数组中。两个相邻的元素,如果第一个数比第二个数大,
我们就交换他们的位置。
2.每一次比较中,都会产生出一个最大,或者最小的数字;
3.下一轮则可以少一次排序!
4.依次排序,直到结束!
*/
public static int[] sort(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[i]) {
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rhJmitLS-1632746234594)(D:\JAVA学习图片\Java数组\05.png)]
算法复杂度
我们看到嵌套循环,马上可以知道这个算法的时间复杂度为O(n2).
优化算法
import java.util.Arrays;
import java.util.Scanner;
public class amy04 {
public static void main(String[] args) {
int[] a = {1, 55, 66, 3, 4, 8, 9, 7, 77, 88, 99};
int [] sort=sort(a);
System.out.println(Arrays.toString(sort));
}
//冒泡排序
/* 1.比较数组中。两个相邻的元素,如果第一个数比第二个数大,
我们就交换他们的位置。
2.每一次比较中,都会产生出一个最大,或者最小的数字;
3.下一轮则可以少一次排序!
4.依次排序,直到结束!
*/
public static int[] sort(int[] array) {
//定义零时变量。
int temp = 0;
//假设进入循环时已经有序了,则没有必要再比较一次
//外层循环,判断我们这个要走多少次;
for (int i = 0; i < array.length - 1; i++) {
boolean flag=false;//通过flag标识位减少没有意义的比较
//内层循环,比较判断两个数,如果第一个数,比第二个数大,
//则交换位置
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j+1] > array[i]) {
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag=true;
}
}
if (flag==false){
break;
}
}
return array;
}
}