冒泡排序
按照排序序列从前向后,依次比较相邻元素的值,若发现逆序则交换,使较大的元素移动到序列的尾部。
优化:如果发现某次排序没有进行过交换,则证明当前为排序完成的序列,设置一个flag来判断元素是否进行过交换,从而减少不必要的比较。
一般来说,会进行
- n-1次大的循环
- 每一趟排序的次数从n-1次开始减小
- 发现某次循环中序列的顺序没有发生变化,则直接退出程序
代码实现:
package com.sortAlgorithm;
public class bubbleSort {
public static void main(String[] args){
int list[] = {3,9,11,10,4};
//打印之前的列表
for(int i = 0; i<list.length; i++) {
System.out.print(list[i]+" ");
}
System.out.println();
//bubble
bubbleSort bubbleSort = new bubbleSort();
bubbleSort.bubble(list);
//打印之后的列表
for(int i = 0; i<list.length; i++) {
System.out.print(list[i]+" ");
}
System.out.println();
}
public void bubble(int list[]){
int count = 0;
int size = list.length;
for (int i = 0; i<size-1; i++) {
for (int j = 0; j < size - 1; j++) {
if (list[j] > list[j + 1]) {
count++;
int temp;
temp = list[j + 1];
list[j + 1] = list[j];
list[j] = temp;
}
}
if (count == 0) {
System.out.println("提前结束了");
return;
} else {
count = 0;
}
}
}
}