/**
* 3.1 直接插入排序: 每步将一个待排序的记录,按其顺序码大小插入到前面已经
* 排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止
*
* EX: int[] nums={8,1,4,2,23,10}; <
*
* 8,1,4,2,23,10
* |
* 1,8,4,2,23,10
* |
* 1,4,8,2,23,10
* |
* 1,2,4,8,23,10
* |
* 1,2,4,8,23,10
* |
* 1,2,4,8,10,23
*
* 直接插入排序是稳定的排序.
* 文件初态不同时,直接插入排序所耗费的时间有很大差异.
* 若文件初态为正序,则每个待插入的记录只需要比较一次就能够找到合适的位置插入,
* 故算法的时间复杂度为O(n),这时最好的情况.若初态为反序,则第i个待插入记录
* 需要比较i+1次才能找到合适位置插入,故时间复杂度为O(n2),这时最坏的情.
* 直接插入排序的平均时间复杂度为O(n2).
*
*/
*/
public static void insertSort(int[] nums) {
int insert;
for(int i=1;i<nums.length;i++){
if(nums[i]<nums[i-1]){
insert=nums[i];
for(int j=i-1;j>=0;j--){
nums[j+1]=nums[j];
if(j==0){
nums[j]=insert;
}
else if(insert>=nums[j-1]){
nums[j]=insert;
break;
}
}
}
}
}
(直接)插入排序(Insert Sort)
最新推荐文章于 2024-08-22 20:46:59 发布