直接排序
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5
代码
public int[] directSort(int[] nums){
//判断数组是否为null
if (nums==null){
return null;
}
//遍历数组
for (int i = 1; i < nums.length ; i++) {
//判断nums[i] < 前一个数
if (nums[i] < nums[i-1]){
//如果小于前一数,要进行遍历插入
for (int j = i; j > 0 ; j--) {
//判断是否小于前一个数
if (nums[j] < nums[j-1]){
//进行互换
int temp = nums[j];
nums[j] = nums[j-1];
nums[j-1] = temp;
}else{
break;
}
}
}
}
//返回nums
return nums;
}
时间复杂度分析:
最佳情况,数组是排序好的,时间复杂度为O(N)
最坏情况,数组是逆序的,时间复杂度为O(N²)
空间复杂度:由于是在同一数组操作,没有借用到其他空间,所以空间复杂度为O(1)