版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011877584/article/details/81557138
package com.fjf.test;
/**
*
* 自己去实践
*
* @author fjf 定义一个数组,按从小到大排出来
*/
public class FjfSort {
public static void main(String[] args) {
int[] a = { 9, 1, 5, 8, 3, 7, 4, 6, 2 };
print("原来的数组:", a);
bubbleSort1(a);
print("冒泡1(其实是最简单的交换排序)后的数组:", a);
bubbleSort2(a);
print("冒泡2(正宗冒泡排序,从后往前冒)后的数组:", a);
bubbleSort3(a);
print("冒泡3(正宗冒泡排序,从前往后冒)后的数组:", a);
bubbleSort4(a);
print("冒泡4(正宗冒泡排序,添加标识优化)后的数组:", a);
}
/**
* 冒泡排序1(最基础版本)
*
* @param data
*
* 这个其实算不上 冒泡排序,因为不能满足"两两比较相邻的记录",更应该是最最简单的交换排序
*
* 相当于是按位置找。
*/
static void bubbleSort1(int[] data) {
for (int i = 0; i < data.length; i++) { // 按照位置来找,先来0位置的, 比较length趟
for (int j = i + 1; j < data.length; j++) { // 某位置的后它后面的一一比较,找到满足的就交换
if (data[j] < data[i]) {
// 交换数据
int temp = data[j];
data[j] = data[i];
data[i] = temp;
}
}
}
}
/**
* 正宗的冒泡排序
*
* @param data
* 这个是从后面往前比,小的往上冒。 第一趟比完,小的升到最小索引位置
*/
static void bubbleSort2(int[] data) {
for (int i = 0; i < data.length - 1; i++) { // 比较的趟数 length-1趟
for (int j = data.length - 1; j > i; j--) { // 注意这里是从后往前比较 no 小的往上升
if (data[j] < data[j - 1]) {
int temp = data[j];
data[j] = data[i];
data[i] = temp;
}
}
}
}
/**
* 冒泡排序,从前往后冒。第一趟比完,最大的数沉入最大索引位置
*
* @param data
*/
static void bubbleSort3(int[] data) {
for (int i = 0; i < data.length - 1; i++) { // 比较的趟数 length-1趟
for (int j = i; j < data.length - 1 - i; j++) { // 注意这里是从前往后冒 大的往下沉
if (data[j] > data[j + 1]) {
int temp = data[j];
data[j] = data[i];
data[i] = temp;
}
}
}
}
/**
* 冒泡排序优化
* 增加标识,如果某趟排过后,整体已经有序,后面的趟数不会再排
*
* @param data
*/
static void bubbleSort4(int[] data) {
Boolean flag = false; // 最开始的标志位
for (int i = 0; i < data.length - 1; i++) {
if (flag) { // 如果flag为true,说明已经有序,后面的趟数就不走了
break;
}
flag = true;
for (int j = data.length - 1; j > i; j--) {
if (data[j] < data[j - 1]) {
int temp = data[j];
data[j] = data[i];
data[i] = temp;
flag = false; // 如果有交换发生,
}
}
}
}
static void print(String str, int[] a) {
System.out.println(str);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println("\n------------------");
}
}