常见排序算法的Java实现代码汇总
来源:互联网 发布:商品标题搜索优化 编辑:程序博客网 时间:2024/05/02 01:27
常见排序算法原理与实现
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 ~ 5
Java实现:
<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; // 插入待排序元素 } }
0 0
- 常见排序算法的Java实现代码汇总
- 几种常见排序算法的Java代码实现
- Java 中几种常见的 排序算法 代码实现
- Java的常见排序之代码实现。
- 常见排序算法的java实现
- 常见经典排序算法的java实现
- 常见排序算法的java实现
- 常见内排序算法的java实现
- 常见排序算法的Java实现
- 常见的排序算法,Java实现
- Java实现常见的排序算法
- Java实现常见的排序算法
- 常见的排序算法 Java实现
- Java实现常见的排序算法
- Java实现几种常见排序算法代码
- Java实现几种常见排序算法代码
- 常见排序算法--java实现
- java实现常见排序算法
- ppython None Null区别
- 关于Hive的练习
- Amazon 亚马逊增加 Gamecircle注意事项
- 设置加载失败,正在加载,界面。
- 问与答——人物传记推荐
- 常见排序算法的Java实现代码汇总
- Android-Preproty animation解析
- Android项目实战--【谁是歌手-逻辑实现篇】
- 拥有大量相同结构Activity的项目精简经验—— ReUsableActivity
- ConcurrentHashMap原理分析
- BZOJ2038 2009国家集训队 小Z的袜子(hose) 题解&代码
- 解决Genymotion无法下载虚拟设备的问题
- 2016年算法之大数乘法
- jstack线程状态分析