标签:arr temp 实现 冒泡排序 int arr1 排序 public
排序之冒泡排序的实现
1、通过对数组中的元素进行两两比较的方法来实现冒泡
图1.1 冒泡之两两比较的图解(注,图片中内容来源于尚硅谷数据结构课程笔记,侵删)
共进行(数组长度-1)次大循环,每一趟排序完成,就确定一个数组元素的位置,因此每趟排序的数组元素数量也随之减少,具体实现见代码中的public static void bbsort1(int arr[])
方法
2、对第1种进行优化
从图1.1中可以看到,在第二趟排序中就已经完成了对数组的排序,不需要再进行第3,4趟,这也是进行优化的地方。
具体实现见代码中的public static void bbsort3(int arr[])
方法。
3、 数组中的每一个元素值依次与后面的元素值进行一一比较
算法效率低,大话数据结构中有分析。
具体实现见代码中的public static void bbsort2(int arr[])
方法
code:
public class BubbleSort {
public static void main(String[] args) {
int arr[] = { 9, 8, 2, 3, 5, 10 };// 静态初始化
bbsort1(arr);
bbsort2(arr);
int arr1[] = { 9, 8, 2, 3, 5, 10 };// 静态初始化
bbsort3(arr1);
}
public static void bbsort1(int arr[]) {
// 实现冒泡排序的最简单形式,时间复杂度O(n^2)
int temp = 0;
// 从小到大排序:两两比较交换
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]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("第" + (i + 1) + "次排序");
System.out.println(Arrays.toString(arr));
}
}
public static void bbsort2(int arr[]) {
// 第二种实现方式:从大到小排序,每个数与数组后面的数依次比较,符合条件就交换
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {// 只需要到倒数第二个值就可以
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] < arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.println("第" + (i + 1) + "次排序");
System.out.println(Arrays.toString(arr));
}
}
public static void bbsort3(int arr1[]) {
// 优化版本的冒泡:减少不必要的比较
// 从方法1可以看出:第4次和第5次的排序输出结果完全一致,即不需要再进行第5次循环
// 所以在一次循环没有进行过交换,则说明此时的数据已经排序完毕,后续的循环不再需要进行
int temp=0;
boolean flag = false;
for (int i = 0; i < arr1.length - 1; i++) {
for (int j = 0; j < arr1.length - 1 - i; j++) {
if (arr1[j] > arr1[j + 1]) {
flag = true;
temp = arr1[j];
arr1[j] = arr1[j + 1];
arr1[j + 1] = temp;
}
}
if (!flag) {
break;
} else {
flag = false;// 一定要重置flag,判断下一个循环中是否交换
}
// System.out.println("第" + (i + 1) + "次排序");
// System.out.println(Arrays.toString(arr1));
}
}
}
标签:arr,temp,实现,冒泡排序,int,arr1,排序,public 来源: https://blog.csdn.net/weixin_44464721/article/details/114649607
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。