java实现插入排序
- 插入排序
将数组看成是两部分,前部分是有序的,后部分是无序的。将无序的数组逐个插入有序的数组中。
java实现
public int[] insertSort(int[] a){ int len = a.length; for(int i=1;i<len;i++){ int key = a[i]; System.out.println("key:"+key); int j=i-1; while(j>=0&&a[j]>key){ //注意使用while,不要使用for a[j+1]=a[j]; j--; } a[j+1]=key; } return a; }
- 冒泡排序
两个指针,循环2遍,时间复杂度O(n2)
java实现
public int[] bubbleSort(int[] a){ for(int i=a.length-1;i>=0;i--){ for(int j=0;j<i;j++){ if(a[j]>a[j+1]){ int temp=a[j+1]; a[j+1]=a[j]; a[j]=temp; } } //System.out.println("a:"+i+":"+a[i]); } return a; }
那么书上经常说的最佳的情况下,时间复杂度是O(n),是怎么得来的呢?答案:是对代码进行了优化的,当在一次遍历的时候,若排列有序了,就终止下一次遍历。
public int[] bubbleSort(int[] a){ boolean didSwap = false; for(int i=a.length-1;i>=0;i--){ for(int j=0;j<i;j++){ if(a[j]>a[j+1]){ int temp=a[j+1]; a[j+1]=a[j]; a[j]=temp; didSwap = true; } } if(didSwap==false){ break; } } return a; }