插入排序及java实现

插入排序思想

默认采用数组作为数据存储结构

插入排序采用的是一种局部有序的思想,所谓局部有序,就是说在数组左边某几个元素之间是有序的,但是未排序的元素可能会在接下来的排序中打乱他们的局部排序。而冒泡排序和选择排序不存在局部有序,因为它们每次都是选择的都是剩余中最大的元素。

插入排序的过程是从第二个元素开始的,因为第一个元素只有自己,也属于局部有序。从第二个元素开始,每个元素都与其左边的挨个比较,如果比左边的小,那么将左边的元素后移一位,直到遇到的左边的元素比它小时比较结束,将此元素赋给空出的这个位置。

时间复杂度

插入排序的复杂度仍为O(N^2),但是一般情况下它比冒泡排序快一倍,比选择排序稍快一些。通常用在较复杂的排序算法的最后阶段,比如快速排序。

java实现

public class InsertSort {
	public static void main(String[] args) {
		int[] arr = {3,4,2,5,4,6,1};
		for(int num:insertSort(arr)){
			System.out.print(num);
		}
	}
	public static int[] insertSort(int[] arr){
		
		for(int i=1;i<arr.length;i++){
			int temp = arr[i];
			if(temp<arr[i-1]){//因为左边是局部有序的,只有此元素比左边的小时才会插入
				int j;
				for(j=i-1;j>=0&&arr[j]>temp;j--){//将局部有序中所有比temp小的元素依次后移一位
					arr[j+1] = arr[j];
				}
				arr[j+1] = temp;//将temp插入到后移之后空出来的位置
			}
		}
		return arr;
	}
}

猜你喜欢

转载自blog.csdn.net/asn_forever/article/details/80877456