排序算法
来源:互联网 发布:ccer数据库 豆掰 编辑:程序博客网 时间:2024/06/07 02:25
直接插入排序
import java.util.Arrays;//直接插入排序public class StraightInsertionSort { public static void InsertSort(int[] A) { for (int i = 1; i < A.length; i++) { int target = A[i]; int j = i; while (j > 0 && target < A[j - 1]) { A[j] = A[j - 1]; j--; } A[j] = target; System.out.println(Arrays.toString(A)); } } public static void main(String[] args) { int[] A = { 49, 38, 65, 97, 76, 13, 27, 49 }; InsertSort(A); }}
折半插入排序
import java.util.Arrays;//二叉排序public class BinaryInsertionSort { public static void BInsertSort(int A[]){ for(int i=1;i<A.length;i++){ int low = 0; int high = i-1; int target = A[i]; while(low<=high){ int mid = (low+high)/2; if(target<A[mid]){ high = mid - 1; }else{ low = mid+1; } } for(int j=i; j>high+1;j--){ A[j] = A[j-1]; } A[high+1] = target; System.out.println(Arrays.toString(A)); } } public static void main(String[] args) { int[] A={49,38,65,97,76,13,27,49}; BInsertSort(A); }}
希尔排序
import java.util.Arrays;//希尔排序public class ShellSort { public static void shellSort(int[] A, int dk) { for (int i = dk; i < A.length; i++) { int target = A[i]; int j = i - dk; while (j >= 0 && target < A[j]) { A[j + dk] = A[j]; j -= dk; } A[j + dk] = target; } } public static void main(String[] args) { int[] dks = { 5, 3, 1 }; int[] A = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 04 }; for (int i = 0; i < dks.length; i++) { shellSort(A, dks[i]); System.out.println(Arrays.toString(A)); } }}
堆排序
import java.util.Arrays;public class HeapSortTest { /** * 数组下标从0开始,根节点下标为i,则它的左右子树的根节点为2*i+1,2*i+2 * * @param args */ private static int leftChild(int i) { return 2 * i + 1; } private static void HeapAdjust(int[] A, int i, int n) { int child = 0; int tmp;// 需要调整的结点 for (tmp = A[i]; leftChild(i) < n; i = child) {//自上向下调整,每次i指向当前待调整节点的孩子节点中的最大值 child = leftChild(i); if (child != n - 1 && A[child] < A[child + 1]) child++; if (tmp < A[child]) A[i] = A[child]; else break; } A[i] = tmp; } private static void swap(int[] a, int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } private static void HeadSort(int[] A) { for (int i = A.length / 2 - 1; i >= 0; i--) {// 建立大顶堆 HeapAdjust(A, i, A.length); } for (int i = A.length - 1; i > 0; i--) { swap(A, 0, i); HeapAdjust(A, 0, i); } } public static void main(String[] args) { // int[] A = { 1,3,4,5,7,2,6,8,0 }; int[] A = { 49, 38, 65, 97, 76, 13, 27, 49 }; HeadSort(A); System.out.println(Arrays.toString(A)); }}
快速排序
import java.util.Arrays;//快速排序public class QuickSort { public static int Partition(int[] A, int low, int high) { int pivotkey = A[low]; while (low < high) { while (low < high && A[high] >= pivotkey) --high; A[low] = A[high]; while (low < high && A[low] <= pivotkey) ++low; A[high] = A[low]; } A[low] = pivotkey; System.out.println(Arrays.toString(A)); return low; } public static void QSort(int[] A, int low, int high) { int pivotloc; if (low < high) { pivotloc = Partition(A, low, high); QSort(A, low, pivotloc - 1); QSort(A, pivotloc + 1, high); } } public static void main(String[] args) { int[] A = { 49, 38, 65, 97, 76, 13, 27, 49 }; QSort(A, 0, A.length - 1); System.out.println("最终结果:" + Arrays.toString(A)); }}
归并排序
import java.util.Arrays;public class MergeSort { private static void merge(int[] s, int[] t, int leftPos, int rightPos, int rightEnd) { // 将有序的S[leftPos...rightPos-1]和S[rightPos...rightEnd]归并为有序的T[leftPos...rightEnd] int tmpPos = leftPos; int leftEnd = rightPos - 1; while (leftPos <= leftEnd && rightPos <= rightEnd) { if (s[leftPos] <= s[rightPos]) {// 将较小的数移到新数组中 t[tmpPos++] = s[leftPos++]; } else { t[tmpPos++] = s[rightPos++]; } } while (leftPos <= leftEnd) { t[tmpPos++] = s[leftPos++]; } while (rightPos <= rightEnd) { t[tmpPos++] = s[rightPos++]; } } private static void MSort(int[] s, int[] t, int left, int right) { int mid; if (left < right) { mid = (left + right) / 2; MSort(s, t, left, mid); MSort(s, t, mid + 1, right); merge(s, t, left, mid + 1, right); } } public static void main(String[] args) { int[] s = { 49, 38, 65, 97, 76, 13, 27 }; int[] t = new int[s.length]; MSort(s, t, 0, s.length - 1); System.out.println(Arrays.toString(t)); }}
阅读全文
0 0
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- mysql主从设计
- 浅谈text段、data段和bss段
- mysql
- Intra Mode Coding With 4-tap Interpolation Filter
- "NetworkError: 400 Bad Request
- 排序算法
- 创建用户
- Java 全角、半角字符转化
- mysql源码脚本安装
- 算法笔记:数组和字符串
- LuoguP1820 寻找AP数
- spring 解耦实例
- 前端初学学习进程VII
- mac下安装pip