怎么做旅游网站,室内设计网站都有哪些平台,域名网站是什么,无敌神马在线观看免费完整Java实现排序的基础方法有很多#xff0c;下面介绍几种比较常见的排序算法及其代码实现。
1.冒泡排序
冒泡排序是一种基础的排序算法#xff0c;其思想是依次比较相邻的两个元素#xff0c;如果顺序不对则交换它们的位置#xff0c;直到整个数组都排好序为止。
代码实现…Java实现排序的基础方法有很多下面介绍几种比较常见的排序算法及其代码实现。
1.冒泡排序
冒泡排序是一种基础的排序算法其思想是依次比较相邻的两个元素如果顺序不对则交换它们的位置直到整个数组都排好序为止。
代码实现
public static void bubbleSort(int[] arr) { int n arr.length; for (int i 0; i n - 1; i) { for (int j 0; j n - i - 1; j) { if (arr[j] arr[j 1]) { int temp arr[j]; arr[j] arr[j 1]; arr[j 1] temp; } } } }
2.快速排序
快速排序是一种高效的排序算法其基本思想是取一个基准元素将小于它的元素放在左边大于它的元素放在右边再递归地对左右两部分进行排序。
代码实现
public static void quickSort(int[] arr, int left, int right) { if (left right) { int pivot partition(arr, left, right); quickSort(arr, left, pivot - 1); quickSort(arr, pivot 1, right); } }
private static int partition(int[] arr, int left, int right) { int pivot arr[left]; int i left 1; int j right; while (i j) { while (i j arr[i] pivot) { i; } while (i j arr[j] pivot) { j--; } if (i j) { int temp arr[i]; arr[i] arr[j]; arr[j] temp; i; j--; } } arr[left] arr[j]; arr[j] pivot; return j; }
3.插入排序
插入排序是一种简单的排序算法其思想是将待排序元素逐个插入到已排序序列中的合适位置。
代码实现
public static void insertSort(int[] arr) { int n arr.length; for (int i 1; i n; i) { int key arr[i]; int j i - 1; while (j 0 arr[j] key) { arr[j 1] arr[j]; j--; } arr[j 1] key; } }
4.选择排序
选择排序是一种简单的排序算法其思想是每次从未排序的元素中选择最小或最大的元素放到已排序序列的末尾。
代码实现
public static void selectSort(int[] arr) { int n arr.length; for (int i 0; i n - 1; i) { int minIndex i; for (int j i 1; j n; j) { if (arr[j] arr[minIndex]) { minIndex j; } } int temp arr[i]; arr[i] arr[minIndex]; arr[minIndex] temp; } }
5.归并排序
归并排序是一种高效的排序算法其基本思想是将待排序序列分成两个子序列分别排序后再将其合并成一个有序序列。
代码实现
public static void mergeSort(int[] arr, int left, int right) { if (left right) { int mid (left right) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid 1, right); merge(arr, left, mid, right); } }
private static void merge(int[] arr, int left, int mid, int right) { int[] temp new int[right - left 1]; // 临时数组 int i left; // 左序列指针 int j mid 1; // 右序列指针 int k 0; // 临时数组指针 while (i mid j right) { if (arr[i] arr[j]) { temp[k] arr[i]; } else { temp[k] arr[j]; } } while (i mid) { temp[k] arr[i]; } while (j right) { temp[k] arr[j]; } // 将临时数组中的元素复制到原数组中 for (int m 0; m temp.length; m) { arr[left m] temp[m]; } }
6.堆排序
堆排序是一种利用堆的数据结构进行排序的算法其基本思想是将待排序序列构造成一个大/小根堆然后每次将堆顶元素最大/最小值放到已排序序列的末尾。
代码实现
public static void heapSort(int[] arr) { int n arr.length; // 构造大根堆 for (int i n / 2 - 1; i 0; i--) { adjustHeap(arr, i, n); } // 排序 for (int i n - 1; i 0; i--) { swap(arr, 0, i); adjustHeap(arr, 0, i); } }
private static void adjustHeap(int[] arr, int i, int n) { int temp arr[i]; for (int j i * 2 1; j n; j j * 2 1) { if (j 1 n arr[j] arr[j 1]) { j; } if (arr[j] temp) { arr[i] arr[j]; i j; } else { break; } } arr[i] temp; }
private static void swap(int[] arr, int i, int j) { int temp arr[i]; arr[i] arr[j]; arr[j] temp; }
7.二分法排序
二分法排序也称为折半插入排序是一种基于插入排序的改进算法。其基本思想是将待排序序列分为已排序和未排序两部分在已排序序列中使用二分查找找到插入位置然后将元素插入到已排序序列的正确位置。
public static void binaryInsertionSort(int[] arr) { int n arr.length; for (int i 1; i n; i) { int target arr[i]; int left 0; int right i - 1; // 使用二分查找找到插入位置 while (left right) { int mid (left right) / 2; if (target arr[mid]) { right mid - 1; } else { left mid 1; } } // 将大于target的元素都向后移动一位 for (int j i - 1; j left; j--) { arr[j 1] arr[j]; } arr[left] target; // 插入元素到正确位置 } }