0.注

以下代码是以前参考视频课程或者其他人的博客写的,现在是复习+做个备份在CSDN上,大部分都忘了为何这样写了,希望各位如果拿某部分代码跑出了问题,可以把用例留个言让我检查反思一下,感激不尽~

1.冒泡排序

public static void bubbleSort(int[] arr){for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j + 1];arr[j + 1] = arr[j];arr[j] = temp;}}}
}

2.插入排序

public static void insertionSort(int[] arr){for (int i = 1; i < arr.length; i++) {for (int j = i; j > 0; j--) {if (arr[j] < arr[j - 1]) {int temp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = temp;} else break;}}
}

3.选择排序

public static void selectionSort(int[] arr){for (int i = 0; i < arr.length; i++) {int min = arr[i];int index = i;for (int j = i + 1; j < arr.length; j++) {if (min > arr[j]) {min = arr[j];index = j;}}int temp = arr[i];arr[i] = min;arr[index] = temp;}
}

4.快速排序

版本1:

public static int[] quickSort(int[] array, int start, int end) {if (start < 0 || end >= array.length || start > end) return null;int smallIndex = partition(array, start, end);if (smallIndex > start)quickSort(array, start, smallIndex - 1);if (smallIndex < end)quickSort(array, smallIndex + 1, end);return array;
}public static int partition(int[] array, int start, int end) {int pivot = (int) (start + Math.random() * (end - start + 1));int smallIndex = start - 1;swap(array, pivot, end);for (int i = start; i <= end; i++)if (array[i] <= array[end]) {smallIndex++;if (i > smallIndex)swap(array, i, smallIndex);}return smallIndex;
}public static void swap(int[] array, int i, int j) {int temp = array[i];array[i] = array[j];array[j] = temp;
}

版本2:

public static int[] quickSortV2(int[] num, int left, int right) {if(left>=right) return num;int pivot=num[left];int i=left;int j=right;while(i<j){while(num[j]>=pivot && i<j){j--;}while(num[i]<=pivot && i<j){i++;}if(i<j){int temp=num[i];num[i]=num[j];num[j]=temp;}}num[left]=num[i];num[i]=pivot;quickSortV2(num,left,i-1);quickSortV2(num,i+1,right);return num;
}

版本3:
来源:Github(校园网抽风打不开,看不到是谁的github里翻出来的代码了,想起来的时候补一下~)

/**
* 三数中值分割法
* @param a 原始数组
* @param left 左边界
* @param right 右边界
* @return 返回枢元
*/
private static <AnyType extends Comparable<? super AnyType>> AnyType median3(AnyType[] a, int left, int right) {int center = (left + right) / 2;if (a[center].compareTo(a[left]) < 0) {swapReferences(a, left, center);}if (a[right].compareTo(a[left]) < 0) {swapReferences(a, left, right);}if (a[right].compareTo(a[center]) < 0) {swapReferences(a, center, right);}swapReferences(a, center, right - 1);return a[right - 1];
}private static <AnyType extends Comparable<? super AnyType>> void swapReferences(AnyType[] a, int i, int j) {AnyType tmp = a[i];a[i] = a[j];a[j] = tmp;
}

5.归并排序

public static int[] MergeSort(int[] array) {if (array.length < 2) return array;int mid = array.length / 2;int[] left = Arrays.copyOfRange(array, 0, mid);int[] right = Arrays.copyOfRange(array, mid, array.length);return merge(MergeSort(left), MergeSort(right));
}public static int[] merge(int[] left, int[] right) {int[] result = new int[left.length + right.length];int  i = 0, j = 0;for (int index = 0; index < result.length; index++) {if (i >= left.length)result[index] = right[j++];else if (j >= right.length)result[index] = left[i++];else if (left[i] > right[j])result[index] = right[j++];elseresult[index] = left[i++];}return result;
}

6.希尔排序

public static void shellSort(int[] arr){for (int i = arr.length / 2; i > 0; i /= 2) {for (int j = i; j < arr.length; j++) {for (int k = j; k > 0  && k - i >= 0; k -= i) {if (arr[k] < arr[k - i]) {int temp = arr[k - i];arr[k - i] = arr[k];arr[k] = temp;} else break;}}}
}

7.堆排

static int len;public static int[] HeapSort(int[] array) {len = array.length;if (len < 1) return array;buildMaxHeap(array);while (len > 0) {swap(array, 0, len - 1);len--;heapify(array, 0);}return array;
}public static void buildMaxHeap(int[] array) {for (int i = (len - 1) / 2; i >= 0; i--) {heapify(array, i);}
}public static void heapify(int[] array, int i) {int mi = i;if (i * 2 < len && array[i * 2] > array[mi])mi = i * 2;if (i * 2 + 1 < len && array[i * 2 + 1] > array[mi])mi = i * 2 + 1;if (mi != i) {swap(array, mi, i);heapify(array, mi);}
}

Java排序算法代码集(7个)相关推荐

  1. java排序算法代码_Java实现八种排序算法(代码详细解释)

    package八大排序算法;importjava.util.Arrays;importorg.junit.Test;/*** 1.插入排序 直接插入排序.希尔排序 折半插入排序 * 2.交换排序 冒泡 ...

  2. java代码实现希尔排序_Java希尔排序算法代码实现

    Java希尔排序算法代码实现 时间:2017-08-30     来源:华清远见JAVA学院 什么是Java希尔排序算法呢? 希尔排序算法实际上是一种分组插入的排序算法,又被称为缩小增量排序.今天华清 ...

  3. Java十大排序算法总结,Java排序算法总结之冒泡排序

    本文实例讲述了Java排序算法总结之冒泡排序.分享给大家供大家参考.具体分析如下: 前言:冒泡排序(BubbleSort)就是依次比较相邻的两个数,将小数放在前面,大数放在后面. 下面让我们一起    ...

  4. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  5. java排序算法 sort_Java排序算法之SleepSort排序示例

    本文实例讲述了Java排序算法之SleepSort排序.分享给大家供大家参考,具体如下: 分享一个很有创意的排序算法:sleepSort .巧妙利用了线程的sleep(),代码如下: public c ...

  6. java 排序算法总结,Java排序算法总结之归并排序

    本文实例讲述了Java排序算法总结之归并排序.分享给大家供大家参考.具体分析如下: 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作.和快速排序类似,让我们一起来看 ...

  7. Java排序算法——插入排序(Insertion Sort)

    之前总结了交换排序的冒泡排序与选择排序的简单选择排序,这次我们来看看插入排序的简单插入排序~ 往期传送门: 冒泡排序: Java排序算法--冒泡排序(Bubble Sort)https://blog. ...

  8. Java排序算法——选择排序

    Java排序算法--选择排序(Selection sort) 传送门 冒泡排序 插入排序 简述 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找 ...

  9. java排序算法(插入排序,冒泡排序,选择排序)

    java排序算法(插入排序,冒泡排序,选择排序) 先了解原理,然后自己跟着敲一下,加深印象 CMD编译命令:javac -encoding utf-8 SortList.java && ...

  10. Java排序算法:冒泡排序

    Java排序算法:冒泡排序 //创建数组并赋值int[] data = new int[] {11,10,55,78,100,111,45,56,79,90,345,1000};for(int i=0 ...

最新文章

  1. JZOJ 5440. 【NOIP2017提高A组冲刺11.1】背包
  2. hdu1010深搜+奇偶剪枝
  3. 华为新系统鸿蒙有哪些手机_华为鸿蒙OS系统传来新消息!外媒宣布:未来几年内华为手机都将无缘...
  4. 数学狂想曲(十)——复变函数, 平稳离散时间随机过程, 功率谱
  5. 可重入锁是什么和demo
  6. 【转】桌面快捷方式不见了的解决办法
  7. java实现展示框,如何使用纯CSS实现蝴蝶标本的展示框效果
  8. sql server 2012 镜像和出现的问题
  9. Numpy中出现“ValueError: zero-size array to reduction operation maximum which has no identity”错误的调试笔记
  10. opencv已知相机投影及内参求外参_一步步用c++实现相机标定(张氏标定法)
  11. zip、rar等密码破解软件
  12. 每个程序员都应该知道的GitHub Repos
  13. 并行传输数据和串行传输数据_计算机系统中的并行处理和数据传输模式
  14. 自动化测试实施流程与规范
  15. 微服务应用开发入门④服务网关
  16. Instruments
  17. RK3568 重新封装V4l2为一个C++ Camera管理类 (基于RK编译环境)
  18. 30 年 IT 老兵谈数字化:这就不是个技术活
  19. 【知识】太阳能板行业生产加工步骤(超详细)
  20. 滑块验证码通杀方案--python破解代码

热门文章

  1. linux运行h3c校园网,H3C Lite轻量级校园网认证Linux客户端(For SHNU)
  2. 计算机北大核心期刊排名2020,2017年版北京大学核心期刊目录4(第八版,2018~2020适用)...
  3. java怎么设置_java环境配置怎么设置?Java基础教程
  4. python制作无限弹窗_Python无限弹窗,开机启动,打包为exe程序
  5. 如何将pdf转换成txt破解版
  6. Jetson Nano 读取 GPS数据(TTL转 USB)
  7. DateUtils解析
  8. VBA 如何多条件查询汇总
  9. java计算机毕业设计美发门店管理系统源码+系统+数据库+lw文档
  10. 快速破解rar解压密码