排序的分类:
选择排序(直接选择排序、堆排序)
交换排序(冒泡排序、快速排序)
插入排序(直接插入排序、二分法排序、Shell排序)
归并排序
若有下列int类型数组需要排序:
int[] arr = {2,9,6,7,4,1};
冒泡排序(Bubble Sort)
基本思路:对未排序的各元素从头到尾以此比较相邻的2个元素大小关系,若于则交换位置,经过第一轮比较排序后可以得出最大值,然后使用同样的方法把剩下的元素逐个比较即可。
可以看出有n个元素,那么一共要进行n-1轮比较.(若6个元素,要进行6-1轮比较,第一轮比较6-1次,第三轮比较6-3次)
// 冒泡排序,分析,找规律
public static void bubbleSort(int[] arr){
// 第一轮
for (int i=1; i<=arr.length-1; i++){
if (arr[i-1] > arr[i]){
int tmp = arr[i-1];
arr[i-1] = arr[i];
arr[i] = tmp;
}
}
// 第二轮
for (int i=1; i<=arr.length-2; i++){
if (arr[i-1] > arr[i]){
int tmp = arr[i-1];
arr[i-1] = arr[i];
arr[i] = tmp;
}
}
// 第二轮
for (int i=1; i<=arr.length-3; i++){
if (arr[i-1] > arr[i]){
int tmp = arr[i-1];
arr[i-1] = arr[i];
arr[i] = tmp;
}
}
// 第三轮...
// ....
}
找到规律了,以上代码整理如下:
/**
* 冒泡排序
* @param arr
*/
public static void bubbleSort(int[] arr){
for (int times=1; times<=arr.length; times++){
for (int i=1; i<=arr.length-times; i++){
if (arr[i-1] > arr[i]){
int tmp = arr[i-1];
arr[i-1] = arr[i];
arr[i] = tmp;
}
}
}
}