排序算法
冒泡排序
冒泡排序思想
- 基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来(假设从小到大),即为较大的数慢慢往后排,较小的数慢慢往前排。
- 直观表达,每一趟遍历,将一个最大的数移到序列末尾。
算法描述(从小到大排序)
- 比较相邻的元素,如果前一个比后一个大,交换之。
- 第一趟:第1个和第2个元素比较,随后第2个和第3个比较,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。
- 第二趟:重复上面步骤,将第二大的数移动至倒数第二位
……
因此需要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
|
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);
}
private static void bubbleSort(int[] arr) { if(arr == null || arr.length < 2 ){ return; } for (int i = 0; i < arr.length - 1; i++) { 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++) { 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]; } }
|