常见排序算法的Java实现代码汇总
2016-03-11 19:44
513 查看
常见排序算法原理与实现
1.冒泡排序
基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。Java实现:import java.util.Arrays; public class BubbleSort { public static void bubbleSort(int[] arr) { int temp = 0; 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]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } public static void main(String[] args) { int[] arr={1,3,5,3,2,6,9,5,8}; bubbleSort(arr); System.out.println(Arrays.toString(arr)); } }
2.快速排序
基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。Java实现:public static void quickSort(int[] arr) { qsort(arr, 0, arr.length - 1); } private static void qsort(int[] arr, int low, int high) { if (low < high) { int pivot = partition(arr, low, high); // 将数组分为两部分 qsort(arr, low, pivot - 1); // 递归排序左子数组 qsort(arr, pivot + 1, high); // 递归排序右子数组 } } private static int partition(int[] arr, int low, int high) { int pivot = arr[low]; // 枢轴记录 while (low < high) { while (low < high && arr[high] >= pivot){ high--; } arr[low] = arr[high]; // 交换比枢轴小的记录到左端 while (low < high && arr[low] <= pivot){ low++; } arr[high] = arr[low]; // 交换比枢轴大的记录到右端 } // 扫描完成,枢轴到尾 arr[low] = pivot; // 返回的是枢轴的位置 return low; }
3.选择排序
基本原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。Java实现:private static void selectionSort(int[] array) {// 每次循环找出相对最小值,并交换到头部for (int i = 0; i < array.length - 1; i++) {int min = i;for (int j = i+1; j < array.length; j++) {if (array[j] < array[min])min = j;}int temp = array[min];array[min] = array[i];array[i] = temp;}}
4.插入排序
基本步骤:1. 从第一个元素开始,该元素可以认为已经被排序2. 取出下一个元素,在已经排序的元素序列中从后向前扫描3. 如果该元素(已排序)大于新元素,将该元素移到下一位置4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置5. 将新元素插入到该位置后6. 重复步骤 2 ~ 5Java实现:<pre name="code" class="java">// 插入排序private static void insertSort(int[] arr) {int key = 0, j = 0;for (int i = 1; i < arr.length; i++) { // 默认第一个元素(下标从0开始)已经有序key = arr[i]; // 待排序元素j = i - 1;while (j >= 0 && arr[j] > key) { // 待排序数较小arr[j + 1] = arr[j]; // 后移j--;}arr[j + 1] = key; // 插入待排序元素}}
相关文章推荐
- JAVA NIO non-blocking模式实现高并发服务器(转)
- Java垃圾回收机制
- Java自定义类数组的创建和使用
- [Java] 算法学习之旅 [0] -- 求任意三位数各个数位上数字的和
- java下载页面的显示类,可以直接调用
- 《Java高级程序设计》第一周作业
- java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplemen
- SSH框架之Struts(2)——Struts的执行流程之配置文件
- java中的Timestamp
- Java常见几种排序方式
- spring,mybatis事务管理配置与@Transactional注解使用[转]
- 使用spring+JMX热部署配置文件
- 简单java反射,小例子,仅供参考
- 菜鸟学SSH之Struts2的配置
- (一)设计模式复习之观察者模式
- hive 配置 mysql时的问题(Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D)
- struts2获取session的三种方式
- spring的lib下面的jar包与UserLibarayjar包造成的类找不到异常
- 图例类与子类,方法重构与重写,抽象类与接口
- Java多线程笔记(1)