用Java来写常见的排序算法
/*** 各种排序算法** @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来写常见的排序算法相关推荐
- PHP面试题:请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。
常见的排序算法: 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. 冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键 ...
- 面试时写不出排序算法?看这篇就够了
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者:静默虚空 juejin.im/post/5cb6b8f551882532c334bcf2 ...
- access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法
排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...
- 程序兵法:Java String 源码的排序算法(一)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 <程序兵法:Java Str ...
- 七种常见的排序算法总结
目录 引言 1.什么是排序? 2.排序算法的目的是什么? 3.常见的排序算法有哪些? 一,插入排序 1.基本思想 2.代码实现 3.性能分析 4.测试 二,希尔排序(缩小增量排序) 1.基本思想 2. ...
- 基于比较的常见的排序算法
目录 写在前面 排序 稳定性 排序的分类 常见的基于比较的排序 直接插入排序 代码 性能分析 总结 代码优化 折半插入 希尔排序 希尔排序 如何分组 代码 性能分析 选择排序 代码 性能分析 双向选择 ...
- 常见的排序算法与MSQL
常见的排序算法 1.常见的排序算法 冒泡排序法.快速排序法.简单选择排序法.堆排序法.直接插入排序法.希尔排序法.合并排序法. (1)冒泡排序法:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现 ...
- java常用的7大排序算法汇总
这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经 ...
- Java常用的八种排序算法与代码实现
在Java的时候,对于排序的应用需要熟练的掌握,这样才能够确保Java学习时候能够有扎实的基础能力.那Java有哪些排序算法呢?本文小千就来详细说说Java经典的8种排序算法. 经典的排序算法有八种, ...
最新文章
- dw可以编辑java吗_为什么很多人说 Java 不适合编写桌面应用?
- 定时任务重启后执行策略_quartz定时任务框架调度机制解析
- nRF5_SDK_12.3.0 编译micro-ecc摘要
- 基于python的系统构建_搭建一个基于python的深度学习环境
- Echarts多任务可视化之再优化
- Chapter2 MSP430硬件结构
- 戴尔r720服务器增加内存,dell r720服务器加了一根内存后,开机显示configuring memory,卡在这里进不了系统,请问这是什么情况?...
- audio隐藏下载按钮
- 文字识别:关键信息提取的3种探索方法
- windows 域名+虚拟目录 (php)
- (转)左耳朵耗子:技术人如何更好地把控发展趋势?
- Omni研究系列【USDT raw transaction】
- 做成事情的3个要素:意愿、能力、资源
- python中线条颜色_python – 在pandas中指定线条颜色
- New B2CShop - Code Smith 修改
- TCP/IP 主要报文头格式
- 如何在线压缩PDF文件大小?
- SH7218T拆解手记(12)IWNN(日文输入)的移植
- 小罗与卡卡辞别世界杯
- maven的setting.xml文件配置