八大排序算法(Java版)
来源:互联网 发布:好scratch编程 编辑:程序博客网 时间:2024/06/06 19:02
一、排序分类
(1)插入排序:直接插入排序、希尔排序
(2)交换排序:冒泡排序、快速排序
(3)选择排序:简单选择排序、堆排序
(4)归并排序
(5)基数排序(分配排序)
二、算法思想及实现
1.直接插入排序
(1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的。
现在要把第n个数插入到前面的有序数列中,使得这 n个数也是排好顺序的。
如此反复循环,直到全部排好顺序为止。
(2)实例:序列T = (49,38,65,97,76,13,27,49)
(3)代码实现
// 直接插入排序public static void InsertSort(int[] a) {int length = a.length;int i, j;for (i = 2; i < length; i++) {if (a[i - 1] > a[i]) {a[0] = a[i]; // a[0]保持要插入的数据a[i] = a[i - 1]; // a[i]后移一位for (j = i - 2; a[j] > a[0]; j--) {a[j + 1] = a[j]; // 将大于a[0]的数整体后移一位}a[j + 1] = a[0]; // 注意这里是j + 1,因为循环结束时j--了}}}
最好的情况下,其时间复杂度为O(n);最坏的情况下,其时间复杂度为O(n^2),且是稳定的排序。
2.折半插入排序
(1)基本思想:在给定的有序的表中查找数据或数据的插入位置,一次将查找范围缩至原有的一半,效率高。(2)实例:序列T = (49,38,65,97,76,13,27,49)
// 折半插入排序public static void BinaryInsertSort(int[] a) {int length = a.length;int i, j;int low, high, mid;for (i = 2; i < length; i++) {if (a[i - 1] > a[i]) {a[0] = a[i]; // a[0]保持要插入的数据low = 1; high = i - 1;while (low <= high) {mid = (low + high) / 2;if (a[0] < a[mid]) {high = mid - 1;} else {low = mid + 1;}}for (j = i - 1; j >= high + 1; j--) {a[j + 1] = a[j]; // 将大于a[0]的数整体后移一位}a[high + 1] = a[0]; }}}
最好的情况下,其时间复杂度为O(n);最坏的情况下,其时间复杂度为O(nlog2n),且是稳定的排序。
3.冒泡排序
(1)基本思想
(2)实例
(3)代码实现
3.冒泡排序
(1)基本思想
(2)实例
(3)代码实现
4.快速排序
(1)基本思想
(2)实例
(3)代码实现
5.简单选择排序
(1)基本思想
(2)实例
(3)代码实现
6.堆排序
(1)基本思想
(2)实例
(3)代码实现
7.归并排序
(1)基本思想
(2)实例
(3)代码实现
8.基数排序
(1)基本思想
(2)实例
(3)代码实现
阅读全文
0 0
- 八大排序算法(Java版)
- java八大排序算法
- 八大排序算法Java
- 八大排序算法Java
- 八大排序算法Java
- 八大排序算法 java
- JAVA八大排序算法
- Java八大排序算法
- Java八大排序算法
- 八大排序算法Java
- 八大排序算法java
- Java 八大排序算法
- Java八大排序算法
- JAVA八大排序算法
- java八大排序算法
- 八大排序算法Java
- 八大排序算法总结(java版)
- JAVA八大排序算法(1)
- 1011. 使用向量排序
- Java日记(2)
- 修改系统的时间
- 剖析asio中的proactor模式(二)
- 猜数字游戏
- 八大排序算法(Java版)
- Java日记(3)
- 判断欧拉路径和欧拉回路
- 三维动态图
- 判断能否被3、5、7整除
- JAVA基础--XML解析
- apply方法
- TI am335x U-boot移植(正常启动)
- 基础练习 BASIC-13 数列排序