一、插入排序(直接插入排序、折半插入排序、希尔排序)
下面的所有的例子都是基于Java编写,并且默认递增排序
直接插入排序:主要分为三步
1、找出该元素要插入的位置i
2、将当前元素保存起来temp=a[i],然后将前面的所有大于该元素的元素向后移动啊a[j+1]=a[j];
3、最后将元素复制到对应位置a[j+1]=temp;
public classSolution1 {
public static void main(String[] args){
int nums[]={1,3,3,2,2};
int temp,i,j;
for(i=1;i<nums.length;i++){
if(nums[i]<nums[i-1]){
temp=nums[i];
for(j=i-1;j>=0&&temp<nums[j];j--)
nums[j+1]=nums[j];
nums[j+1]=temp;//复制到要插入的位置
}
}
System.out.println(Arrays.toString(nums));
}
}
折半插入排序
1、从前面的子表中查找出待插入元素应该被插入的位置
2、给插入位置腾出空间,将待插入元素复制到表中的位置
public classSolution1 {
public static void main(String[] args){
int nums[]={1};
int temp,i,j,low,high,mid;
for(i=1;i<nums.length;i++){//从1到nums.length的位置进行排序
temp=nums[i];//将要插入的元素保存
low=0;high=nums[i-1];
while(low<=high){
mid=low+high/2;
if(nums[mid]>temp)high=mid-1;//查找左边的表
else low=mid+1;//查找右边的表
}
for(j=i-1;j>=high+1;j--)//从后面的元素往前移动
nums[j+1]=nums[j];//后移一位
nums[high+1]=temp;//最后插入空出的位置
}
System.out.println(Arrays.toString(nums));
}
}
希尔排序:适用于基本有序和数据量不大的排序表,我写的时候用的比较少,这个这里就不再叙述了