插入排序复习
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序复习相关的知识,希望对你有一定的参考价值。
基本思想将一个元素插入到有序的数组中
先假设前面的第一个元素是已经排好序的数组;不断从后面依次访问元素,放入到前面的有序数组中,根据由小到大的规则调整这个元素在有序数组中的位置(逐个比较交换),…直到当前数组结束;
还是在912. 排序数组题进行测试
基本思想步骤
class Solution
public int[] sortArray(int[] nums)
int n = nums.length;
//插入排序;
//假定前面的是有序数组,从第2个元素开始;
for(int i =1;i<n;i++)
for(int j=i;j>0;j--)
//注意是要和前面的有序数组比较;
if(nums[j]<nums[j-1])
swap(nums,j-1,j);
else
break;
return nums;
//交换方法;
private void swap(int[] nums,int a,int b)
//简单的临时变量交换法;
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
或者写成
class Solution
public int[] sortArray(int[] nums)
int n = nums.length;
//插入排序;
//假定前面的是有序数组,从第2个元素开始;
for(int i =1;i<n;i++)
for(int j=i;j>0 && nums[j]<nums[j-1];j--)
//注意是要和前面的有序数组比较;
swap(nums,j-1,j);
return nums;
//交换方法;
private void swap(int[] nums,int a,int b)
//简单的临时变量交换法;
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
当然,会超时的;
那么优化时,通过避免交换方式,
转而使用比较赋值即可;将当前数先存入一个第三方变量;
当前元素和前面的有序数组比较时,找到合适位置,将第三方变量的值放到合适位置即可;
class Solution
public int[] sortArray(int[] nums)
int n = nums.length;
//插入排序;
//假定前面的是有序数组,从第2个元素开始;
for(int i =1;i<n;i++)
int dsf = nums[i];
int j=i;
for(;j>0;j--)
//注意是要和前面的有序数组比较;
if(dsf<nums[j-1])
//若前面的值大,则把它的值覆盖到当前元素位置;
nums[j] = nums[j-1];
else
break;
//将第三方变量的值交到合适位置;
nums[j] = dsf;
return nums;
以上是关于插入排序复习的主要内容,如果未能解决你的问题,请参考以下文章