【编程题】插入排序(java实现)
思路
将新的数字添加到已经排序的数组;
例如
1 3 5
插入2
第一次和5比较,5更大,5往后移
第二次和3比较,3更大,3往后移
第三次和1比较,2更大,2放到当前位置
1 2 3 5
插入7
第一次和5比较,7更大,放到当前位置
1 2 3 5 7
时间复杂度O(n^2)
package sort;
import java.util.Arrays;
public class InsertionSort {
public static void main(String[] args){
int[] arr={3,4,2,1,4,2,5,6};
insertionSort(arr);
System.out.println(Arrays.toString(arr));
}
private static void insertionSort(int[] arr){
int len=arr.length;
if(len<=1)return;
for(int i=1;i<len;i++) {
int tem=arr[i];
int j=i-1;
for(;j>=0;j--){
if(tem<arr[j])
arr[j+1]=arr[j];
else
break;
}
arr[j+1]=tem;
}
}
}
思路
将新的数字添加到已经排序的数组;
例如
1 3 5
插入2
第一次和5比较,5更大,5与2交换 》》》1 3 2 5
第二次和3比较,3更大,3与2交换 》》》1 2 3 5
第三次和1比较,2更大,不交换 ,结束》》》1 2 3 5
1 2 3 5
插入7
第一次和5比较,7更大,不交换 ,结束》》》1 2 3 5 7
1 2 3 5 7
时间复杂度O(n^2)
import java.util.Arrays;
public class InsertionSort {
public static void main(String[] args){
int[] arr={3,4,2,1,4,2,5,6};
insertionSort(arr);
System.out.println(Arrays.toString(arr));
}
private static void insertionSort(int[] arr){
int len=arr.length;
if(len<=1)return;
for(int i=1;i<len;i++) {
for(int j=i-1;j>=0&&arr[j]>arr[j+1];j--){
swap(arr,j,j+1);
}
}
}
private static void swap(int[] arr,int i,int j){
int tem=arr[i];
arr[i]=arr[j];
arr[j]=tem;
}
}