插入排序
2017-10-09 14:45
225 查看
基本概念:
InsertionSort(插入排序):将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据;插入排序适合于少量的排序。
时间复杂度为:O(n^2)
实例代码:
当 i= 0的时候;j=i=0;第二for循环的判断语句是j>0;可见当i=0 的时候并没有进去第二重for循环;
当 i = 1的时候;开始进入第二重for循环;开始从j=i开始倒序比较;如果后一个元素比前一个元素要小,那么需要在数组中这两个元素需要交换位置
上面代码中sort函数可以简写为
InsertionSort(插入排序):将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据;插入排序适合于少量的排序。
时间复杂度为:O(n^2)
实例代码:
package dong.sort; /** * 插入排序 * @author YIMA * */ public class InsertionSort { public static void main(String[] args) { Integer[] arr = {1,3,2,5,4}; InsertionSort.sort(arr); for(int a:arr){ System.out.println(a); } } private static void sort(Integer[] arr) { int n = arr.length; for(int i=0; i<n; i++){ //实质上该循环从j=i=1开始;然后倒序比较 for(int j = i;j>0;j--){ if(arr[j]<arr[j-1]){ swap(arr,j,j-1); //因为前面的数据是已经排序好的,如果arr[j]和arr[j-1]比较 //不满足条件的话,立即可以跳出循环。 }else{ break; } } } } //交换位置 private static void swap(Integer[] arr, int j, int i) { int temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } }
当 i= 0的时候;j=i=0;第二for循环的判断语句是j>0;可见当i=0 的时候并没有进去第二重for循环;
当 i = 1的时候;开始进入第二重for循环;开始从j=i开始倒序比较;如果后一个元素比前一个元素要小,那么需要在数组中这两个元素需要交换位置
上面代码中sort函数可以简写为
private static void sort(Integer[] arr) { int n = arr.length; for(int i=0; i<n; i++){ //实质上该循环从j=i=1开始;然后倒序比较 for(int j = i;j>0 && arr[j]<arr[j-1];j--){ swap(arr,j,j-1);} } }
相关文章推荐
- 新手学习数据结构与算法---直接插入排序
- 插入排序
- 二叉搜索树的相关操作:插入节点,删除节点,排序,查找,最大值,最小值,前序,中序,后序遍历(主要用到递归的方法)
- 直接插入排序学习
- 单链表直接插入排序
- c++实现插入排序模版
- Java排序之插入排序[直接插入排序](3)
- 基本排序算法--插入排序
- 插入排序和选择排序
- 插入排序(insertion sort)
- 算法之基本排序(冒泡,选择,插入)
- 插入排序 二分插入排序 学习
- 十大基础排序 · 一 --- 直接插入排序(稳定)
- 第16周项目插入排序之希尔排序
- 第十五周 项目4 直接插入排序
- Python--排序--插入排序
- 链表操作:创建,插入,排序,反转
- 在数组中插入数字,并从小到大进行排序(初学小记)
- 算法导论(3)插入排序
- 第十六周 项目一(2).插入排序之希尔排序