插入排序
来源:互联网 发布:淘宝香港地址怎么填写 编辑:程序博客网 时间:2024/06/06 03:38
基本概念:
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);} } }