本文共 3154 字,大约阅读时间需要 10 分钟。
以下是几种常见排序算法及其实现思想:
实现思想:通过交换数组头尾元素,使得数组逐步逆序排列。
代码示例:
public static void receive(int[] arr) { for (int start = 0, end = arr.length - 1; start < end; start++, end--) { int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; }}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};receive(arr); // 输出:9,5,8,7,2,1,6,4,3 实现思想:从左至右依次选择当前未排序部分中的最小值,放到已排序区。
代码示例:
public static void select_sort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int k = i; for (int j = k + 1; j < arr.length - 1; j++) { if (arr[j] < arr[k]) { k = j; } } if (k != i) { int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } }}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};select_sort(arr); // 输出:1,2,3,4,5,6,7,8,9 实现思想:通过多次从头到尾逐步调整,逐步将较大的元素排至数组末尾。
代码示例:
public static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};bubbleSort(arr); // 输出:1,2,3,4,5,6,7,8,9 实现思想:遍历数组,逐一比较元素,找出目标值。
代码示例:
public static int getArrayIndex(int[] arr, int number) { for (int i = 0; i < arr.length; i++) { if (arr[i] == number) { return i; } } return -1;}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};int arrayIndex = getArrayIndex(arr, 1);System.out.println(arrayIndex); // 输出:3 实现思想:利用有序数组的性质,通过中间元素判断查找范围,逐步缩小范围。
代码示例:
public static int halfSearch(int[] arr, int number) { int min = 0; int max = arr.length - 1; while (min <= max) { int mid = (min + max) / 2; if (arr[mid] > number) { max = mid - 1; } else if (arr[mid] < number) { min = mid + 1; } else { return mid; } } return -1;}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};bubbleSort(arr);int arrayIndex = halfSearch(arr, 3);System.out.println(arrayIndex); // 输出:2 实现思想:通过选择一个基准元素,将数组划分为左半部分和右半部分,递归排序左右子数组,然后合并。
代码示例:
public static void quickSort(int[] arr) { if (null == arr) { System.out.println("传入的数组为空!!!"); return; } for (int i = 0; i < arr.length; i++) { int index = i; for (int j = i; j < arr.length; j++) { if (arr[index] > arr[j]) { index = j; } } if (index != i) { int temp = arr[index]; arr[index] = arr[i]; arr[i] = temp; } }}// 示例使用int[] arr = {3, 4, 6, 1, 2, 7, 8, 5, 9};quickSort(arr); // 输出:1,2,3,4,5,6,7,8,9 优点:
缺点:
优化方法:使用动态规划,提前计算并存储所有可能结果以减少重复计算。
示例:
int Fib(unsigned n) { if (n == 1) return 1; if (n == 0) return 0; return Fib(n - 1) + Fib(n - 2);}int Fib(unsigned n) { int* f = new int[n + 1]; f[1] = 1; f[0] = 0; for (int i = 0; i <= n; i++) { f[i] = f[i - 1] + f[i - 2]; } return f[n];} 转载地址:http://kwse.baihongyu.com/