Java开发-冒泡排序

排序算法

冒泡排序

冒泡排序思想

  • 基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来(假设从小到大),即为较大的数慢慢往后排,较小的数慢慢往前排。
  • 直观表达,每一趟遍历,将一个最大的数移到序列末尾

算法描述(从小到大排序)

  1. 比较相邻的元素,如果前一个比后一个大,交换之。
  2. 第一趟:第1个和第2个元素比较,随后第2个和第3个比较,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。
  3. 第二趟:重复上面步骤,将第二大的数移动至倒数第二位
    ……
    因此需要n-1趟;

动图实现

![](Java SE\image-冒泡1.gif)

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
* @ClassName: BubbleSortMain
* @Author: Numen_fan
* @Date: 2019/3/4 下午9:15
* @Version: 1.0
* @Description: 冒泡排序
*/

import com.jiajia.ArrayUtil.*; // 按包名导入

public class BubbleSortMain {

public static void main(String[] args) {
int[] arr = {2,5,1,3,8,5,7,4,3};
bubbleSort(arr);

ArrayUtil.print(arr);

}

/**
* 冒泡排序
* @param arr
*/
private static void bubbleSort(int[] arr) {
if(arr == null || arr.length < 2 ){
return;
}
// 控制趟数,不牵涉i位置的元素变动(重点)
// 之所以-1,举例:两个元素,只需要1趟即可。
for (int i = 0; i < arr.length - 1; i++) {
// 每一趟的元素比较,注意 -1, 两个元素的数组推导一下就懂了。
for (int j = 0; j < arr.length - i -1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}

选择排序

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//数组
int[] arrs ={1,2,1,65,189,16,156,147,65,23,456};
//最小数下标
int minIndex ;
//控制循环轮数
for (int i = 0; i < arrs.length-1; i++) {
//先把每一轮最小下标定义为i,i递增则随之减少剩余需要排序数
minIndex = i;
//控制每一轮的排序
for (int j = i+1; j < arrs.length; j++) {
if (arrs[minIndex]>arrs[j]){
minIndex = j;
}
}
if (minIndex != i) {
arrs[minIndex] = arrs[minIndex]+arrs[i];
arrs[i] =arrs[minIndex]-arrs[i];
arrs[minIndex] = arrs[minIndex]-arrs[i];
}
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!