/*** 各种排序算法** @author huwei**/
public class Sort {public static void main(String[] args) {int[] a = { 60, 57, 89, 47, 57, 98, 45, 35, 73 };Sort sort = new Sort();sort.quickSort(a);for (int i = 0; i < a.length; i++) {System.out.print(" " + a[i] + " ");}}/*** 插入排序** @param data*/public void insertSort(int[] data) {for (int i = 1; i < data.length; i++) {for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) {swap(data, j, j - 1);}}}/*** 冒泡排序** @param data*/public void bubbleSort(int[] data) {for (int i = 0; i < data.length; i++) {for (int j = data.length - 1; j > i; j--) {if (data[j] < data[j - 1]) {swap(data, j, j - 1);}}}}/*** 选择排序** @param data*/public void selectSort(int[] data) {for (int i = 0; i < data.length; i++) {int lowIndex = i;for (int j = data.length - 1; j > i; j--) {if (data[j] < data[lowIndex]) {lowIndex = j;}}swap(data, i, lowIndex);}}/*** shell排序** @param data*/public void shellSort(int[] data) {for (int i = data.length / 2; i > 2; i /= 2) {for (int j = 0; j < i; j++) {insertSort(data, j, i);}}insertSort(data, 0, 1);// 最后进行一次插入排序
    }private void insertSort(int[] data, int start, int inc) {for (int i = start + inc; i < data.length; i += inc) {for (int j = i; (j >= inc) && (data[j] < data[j - inc]); j -= inc) {swap(data, j, j - inc);}}}/*** 快速排序 重点** @param data*/public void quickSort(int[] data) {quickSort(data, 0, data.length - 1);}private void quickSort(int[] data, int i, int j) {int pivotIndex = (i + j) / 2;// swap
        swap(data, pivotIndex, j);int k = partition(data, i - 1, j, data[j]);swap(data, k, j);if ((k - i) > 1)quickSort(data, i, k - 1);if ((j - k) > 1)quickSort(data, k + 1, j);}private int partition(int[] data, int l, int r, int pivot) {do {while (data[++l] < pivot);while ((r != 0) && data[--r] > pivot);swap(data, l, r);} while (l < r);swap(data, l, r);return l;}/*** 归并排序** @param data*/public void mergeSort(int[] data) {int[] temp = new int[data.length];mergeSort(data, temp, 0, data.length - 1);}private void mergeSort(int[] data, int[] temp, int l, int r) {int mid = (l + r) / 2;if (l == r)return;mergeSort(data, temp, l, mid);mergeSort(data, temp, mid + 1, r);for (int i = l; i <= r; i++) {temp[i] = data[i];}int i1 = l;int i2 = mid + 1;for (int cur = l; cur <= r; cur++) {if (i1 == mid + 1)data[cur] = temp[i2++];else if (i2 > r)data[cur] = temp[i1++];else if (temp[i1] < temp[i2])data[cur] = temp[i1++];elsedata[cur] = temp[i2++];}}/*** 堆排序** @param data*/public void heapSort(int[] data) {MaxHeap h = new MaxHeap();h.init(data);for (int i = 0; i < data.length; i++)h.remove();System.arraycopy(h.queue, 1, data, 0, data.length);}private static class MaxHeap {void init(int[] data) {this.queue = new int[data.length + 1];for (int i = 0; i < data.length; i++) {queue[++size] = data[i];fixUp(size);}}private int size = 0;private int[] queue;/*  public int get() {return queue[1];}*/public void remove() {swap(queue, 1, size--);fixDown(1);}// fixdownprivate void fixDown(int k) {int j;while ((j = k << 1) <= size) {if (j < size && queue[j] < queue[j + 1])j++;if (queue[k] > queue[j]) // 不用交换break;swap(queue, j, k);k = j;}}private void fixUp(int k) {while (k > 1) {int j = k >> 1;if (queue[j] > queue[k])break;swap(queue, j, k);k = j;}}}public static void swap(int[] data, int i, int j) {int temp = data[i];data[i] = data[j];data[j] = temp;}
}

用Java来写常见的排序算法相关推荐

  1. PHP面试题:请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。

    常见的排序算法: 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. 冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键 ...

  2. 面试时写不出排序算法?看这篇就够了

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者:静默虚空 juejin.im/post/5cb6b8f551882532c334bcf2 ...

  3. access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法

    排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...

  4. 程序兵法:Java String 源码的排序算法(一)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 <程序兵法:Java Str ...

  5. 七种常见的排序算法总结

    目录 引言 1.什么是排序? 2.排序算法的目的是什么? 3.常见的排序算法有哪些? 一,插入排序 1.基本思想 2.代码实现 3.性能分析 4.测试 二,希尔排序(缩小增量排序) 1.基本思想 2. ...

  6. 基于比较的常见的排序算法

    目录 写在前面 排序 稳定性 排序的分类 常见的基于比较的排序 直接插入排序 代码 性能分析 总结 代码优化 折半插入 希尔排序 希尔排序 如何分组 代码 性能分析 选择排序 代码 性能分析 双向选择 ...

  7. 常见的排序算法与MSQL

    常见的排序算法 1.常见的排序算法 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. (1)冒泡排序法:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现 ...

  8. java常用的7大排序算法汇总

    这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经 ...

  9. Java常用的八种排序算法与代码实现

    在Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力.那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法. 经典的排序算法有八种, ...

最新文章

  1. dw可以编辑java吗_为什么很多人说 Java 不适合编写桌面应用?
  2. 定时任务重启后执行策略_quartz定时任务框架调度机制解析
  3. nRF5_SDK_12.3.0 编译micro-ecc摘要
  4. 基于python的系统构建_搭建一个基于python的深度学习环境
  5. Echarts多任务可视化之再优化
  6. Chapter2 MSP430硬件结构
  7. 戴尔r720服务器增加内存,dell r720服务器加了一根内存后,开机显示configuring memory,卡在这里进不了系统,请问这是什么情况?...
  8. audio隐藏下载按钮
  9. 文字识别:关键信息提取的3种探索方法
  10. windows 域名+虚拟目录 (php)
  11. (转)左耳朵耗子:技术人如何更好地把控发展趋势?
  12. Omni研究系列【USDT raw transaction】
  13. 做成事情的3个要素:意愿、能力、资源
  14. python中线条颜色_python – 在pandas中指定线条颜色
  15. New B2CShop - Code Smith 修改
  16. TCP/IP 主要报文头格式
  17. 如何在线压缩PDF文件大小?
  18. SH7218T拆解手记(12)IWNN(日文输入)的移植
  19. 小罗与卡卡辞别世界杯
  20. maven的setting.xml文件配置

热门文章

  1. AI创业营第三期拉开帷幕:生存训练+思想盛宴
  2. 亚马逊遭遇15万人联名抗议:AI刷脸可以,但卖给政府不OK
  3. 史上最大规模机器人“面相”调查:157张脸背后的人类感受
  4. 无人驾驶是好,但晕车咋办?
  5. 中国无人车第一案!百度状告景驰王劲:窃取机密,不还电脑,索赔5000万
  6. 如何利用msxsl绕过AppLocker?
  7. Android studio ,Gradle 添加so库
  8. HoverTree开发日志之验证码
  9. Jenkins持续集成案例之-运维部署方式
  10. Vue 作者尤雨溪:以匠人的态度不断打磨完善 Vue