您的位置:首页 > 其它

插入排序

2017-10-09 14:45 225 查看
基本概念:

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);}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序