java数据结构--排序
2017-05-30 18:29
316 查看
数据的移动方式,可分为“直接移动”和“逻辑移动”两种。直接移动改变两个数据的位置,而逻辑移动,则是改变数据的指针。
数据移动使用的内存:内部排序,排序的数据量小,可以完全在内存中进行。外部排序,排序的数据量无法直接在内存内进行排序,而必须使用辅助存储器。
排序算法的选择,通常由以下几点决定
算法是否稳定,排序过后,两个相同值的记录位置先后顺序不变,则为稳定。
时间复杂度
空间复杂度
内部排序法简介
代码如下
数据移动使用的内存:内部排序,排序的数据量小,可以完全在内存中进行。外部排序,排序的数据量无法直接在内存内进行排序,而必须使用辅助存储器。
排序算法的选择,通常由以下几点决定
算法是否稳定,排序过后,两个相同值的记录位置先后顺序不变,则为稳定。
时间复杂度
空间复杂度
内部排序法简介
排序 | 排序名称 | 排序特性 |
---|---|---|
简单排序法 | 冒泡排序法(Bubble Sort) | 稳定排序法;空间复杂度为最佳,只需一个额外空间O(1) |
选择排序法 | 不稳定排序法;复杂度为最佳,只需一个额外空间O(1) | |
插入排序发 | 稳定排序法;空间复杂度为最佳,只需一个额外空间O(1) | |
希尔排序法 | 稳定排序法;空间复杂度为最佳,只需一个额外空间O(1) | |
高级排序法 | 快速排序法 | 不稳定排序法;空间复杂度最差为O(n),最佳为O(log2n) |
堆积排序法 | 不稳定排序法;空间复杂度为最佳,只需一个额外空间O(1) | |
基数排序法 | 稳定排序法;空间复杂度为O(np),n为原始数据的个数,p为基地 |
package com.cjm.mvnbook.test8.SourceTest; public class SortTest { public static void main(String[] args) { int[] arr = new int[]{6, 5, 3, 2, 4, 8, 9, 1}; ShellSort(arr); } //冒泡排序 public static void BubbleSort(int[] arr){ int length = arr.length - 1; int tmp; for (int i = length; i > 0; i--) { for (int j = 0; j < i; j++) { if (arr[j] > arr[j+1]){ tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } } //选择排序 public static void SelectSort(int[] arr){ int length = arr.length - 1; int temp; for (int i = 0; i < length; i++) { for (int j = i + 1; j < length + 1; j++) { if(arr[i] > arr[j]){ temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } //插入排序 public static void InsertSort(int[] arr){ int length = arr.length; int i,j,tmp; for (i = 1; i < length; i++) { tmp = arr[i]; j = i -1; while (j >=0 && tmp < arr[j]){ arr[j+1] = arr[j]; j--; } arr[j+1] = tmp; showData(arr); } } //希尔排序 public static void ShellSort(int[] arr){ int i; //i为扫描次数 int j; //以j来定位比较的元素 int k = 1; //k打印计数 int tmp;//tmp用来暂存数据 int jmp;//设定间隔位移量 int size = arr.length; jmp =size/2; while (jmp != 0){ for (i = jmp; i < size; i++){ tmp = arr[i]; j = i - jmp; while (j >= 0 && tmp < arr[j]){ arr[j + jmp] = arr[j]; j = j - jmp; } arr[jmp + j] = tmp; } System.out.println("第" + (k++) + "次排序:"); showData(arr); jmp = jmp/2; } } public static void showData(int[] arr){ for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println("\n"); } }
相关文章推荐
- Java的数据结构——排序
- 数据结构java语言的各种排序
- Java数据结构----树--二叉查找(搜索或排序)树BST
- 数据结构--排序系列(插入排序,希尔排序,堆排序)Java代码实现
- java数据结构代码记录---归并排序代码
- JAVA数据结构 直接选择排序
- 【数据结构】-直接插入排序、希尔排序Java实现
- Java 数据结构和算法 排序
- 算法和数据结构-排序-插入排序(Java)
- java数据结构排序之冒泡实现
- Java Map数据结构与排序
- 算法和数据结构-选择排序、插入排序及希尔排序 java实现
- 数据结构-Java实现-排序
- 数据结构 JAVA描述(十一) 选择排序(直接选择排序,树形选择排序,堆排序)
- 彻底弄明白之数据结构中的排序七大算法-java实现
- 数据结构各种排序java实现个人总结
- 数据结构中的三种排序(java)
- 【数据结构】Java实现各类经典排序算法——选择排序、冒泡排序
- 【数据结构】Java实现各类经典排序算法——快速排序、归并排序
- Java数据结构 遍历 排序 查找 算法实现