/**
* 插入排序
* 最好的时间复杂度O(n),数组有序的时候
* 最差O(n*n)
*
*
*
*
*
*
*
*/
public class InsertSort {
public static void main(String[] args) {
int arr[] = new int[]{8, 4, -3, 2, -9, 6};
insertSort2 (arr);
print(arr);
}
public static void insertSort(int nums[]) {
int i, j;
for (i = 1; i < nums.length; i++) {
//寻找arr[i]合适的插入位置
for (j = i; j > 0; j--) { //插入排序,比插入元素大的数向右移动一位
if (nums[j] < nums[j - 1]) {
// swap(nums[j-1],nums[j]);
int temp = nums[j-1];
nums[j-1] =nums[j];
nums[j] = temp;
} else {
break;
}
}
}
}
/**
* 简化版
* @param nums
*/
public static void insertSort2(int nums[]) {
for (int i = 1; i < nums.length; i++) {
for (int j = i; j > 0 && nums[j]<nums[j - 1]; j--) { //插入排序,比插入元素大的数向右移动一位
swap(nums[j - 1], nums[j]);
int temp = nums[j-1];
nums[j-1] =nums[j];
nums[j] = temp;
}
}
}
public static void swap(int a,int b){
int t=a;
a=b;
b=t;
}
/**
*
* 改进版本 3
*
*
* @param nums
*/
public static void insertSort3(int nums[]) {
int i, j;
for (i = 1; i < nums.length; i++) {
int temp=nums[i];
for (j = i; j > 0 && nums[j-1] >temp; j--) { //插入排序,比插入元素大的数向右移动一位
nums[j]=nums[j-1];
}
nums[j]=temp;
}
}
public static void print(int arr[]){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
}
}
数据结构与算法之插入排序
最新推荐文章于 2023-05-07 11:51:54 发布