直接插入排序
2016-01-18 14:23
281 查看
//这是我自己写的直接插入排序,直接插入排序的思想就是 以第一个数为基准,把后边的数,插入到前边已经排好序的适当位置上,直到整个有序,稳定排序,时间复杂度为O(n^2)
public class insertsort {
public static void main(String args[]){
int[] array={34,3,53,2,23,7,14,10};
insertsort(array);
for(int a:array)
System.out.print(a+" ");
}
private static void insertsort(int[] nums){
int len=nums.length;
if(len<2) return;
for(int i=1;i<len;++i){ //从第二个元素开始,进行插入
for(int j=0;j<i;++j){ //插入的元素要和它前边已经排好序的进行比较
if(nums[i]<nums[j]){ //如果小于,则进行插入
int temp=nums[i]; //保存待插入的元素
for(int k=i;k>j;--k) //顺序把要插入位置后边的元素往后移动一位
nums[k]=nums[k-1];
nums[j]=temp;
}
}
}
}
}
//直接插入排序,直接插入排序的思想就是,以第一个数为基准,把后边的数, 插入到前边已经排好序的适当位置上,直到整个有序,稳定排序,时间复 杂度为O(n^2)
public class insertsort {
public static void main(String args[]){
int[] array={34,3,53,2,23,7,14,10};
insertsort(array);
for(int a:array)
System.out.print(a+" ");
}
private static void insertsort(int[] nums){
int len=nums.length;
if(len<2) return;
for(int i=1;i<len;++i){ //从第二个元素开始,进行插入
if(nums[i]<nums[i-1]){ //倒着进行比较,如果大于最后一个,则不做变动
int temp=nums[i],j;//如果小于最后一个,则从后往前进行比较
for (j = i - 1; j >= 0 && nums[j] > temp; j--)
nums[j+1]=nums[j];//这个for语句实现了元素的后移
nums[j+1]=temp;//插入元素
}
}
}
}
//直接插入排序,直接插入排序的思想就是 以第一个数为基准,把后边的数,插入到前边已经排好序 的适当位置上,直到整个有序,稳定排序,时间复杂度为O(n^2)
public class insertsort {
public static void main(String args[]){
int[] array={34,3,53,2,23,7,14,10};
insertsort(array);
for(int a:array)
System.out.print(a+" ");
}
private static void insertsort(int[] nums){
int len=nums.length;
if(len<2) return;
for(int i=1;i<len;++i){ //从第二个元素开始,进行插入
for(int j=i-1;j>=0 && nums[j]>nums[j+1];--j){ //插入的元素要和它前边已经排好序的进行比较
int temp=nums[j+1]; //用数据交换代替数据后移
nums[j+1]=nums[j];
nums[j]=temp;
}
}
}
}
如果在插入的元素的时候,对于比较的操作,进行类似二分查找的思想应用的话,就叫做折半插入排序算法,在最坏情况下好于直接插入,在最好情况下坏与直接插入,平均时间复杂度为O(n^2)
public class insertsort {
public static void main(String args[]){
int[] array={34,3,53,2,23,7,14,10};
insertsort(array);
for(int a:array)
System.out.print(a+" ");
}
private static void insertsort(int[] nums){
int len=nums.length;
if(len<2) return;
for(int i=1;i<len;++i){ //从第二个元素开始,进行插入
for(int j=0;j<i;++j){ //插入的元素要和它前边已经排好序的进行比较
if(nums[i]<nums[j]){ //如果小于,则进行插入
int temp=nums[i]; //保存待插入的元素
for(int k=i;k>j;--k) //顺序把要插入位置后边的元素往后移动一位
nums[k]=nums[k-1];
nums[j]=temp;
}
}
}
}
}
//直接插入排序,直接插入排序的思想就是,以第一个数为基准,把后边的数, 插入到前边已经排好序的适当位置上,直到整个有序,稳定排序,时间复 杂度为O(n^2)
public class insertsort {
public static void main(String args[]){
int[] array={34,3,53,2,23,7,14,10};
insertsort(array);
for(int a:array)
System.out.print(a+" ");
}
private static void insertsort(int[] nums){
int len=nums.length;
if(len<2) return;
for(int i=1;i<len;++i){ //从第二个元素开始,进行插入
if(nums[i]<nums[i-1]){ //倒着进行比较,如果大于最后一个,则不做变动
int temp=nums[i],j;//如果小于最后一个,则从后往前进行比较
for (j = i - 1; j >= 0 && nums[j] > temp; j--)
nums[j+1]=nums[j];//这个for语句实现了元素的后移
nums[j+1]=temp;//插入元素
}
}
}
}
//直接插入排序,直接插入排序的思想就是 以第一个数为基准,把后边的数,插入到前边已经排好序 的适当位置上,直到整个有序,稳定排序,时间复杂度为O(n^2)
public class insertsort {
public static void main(String args[]){
int[] array={34,3,53,2,23,7,14,10};
insertsort(array);
for(int a:array)
System.out.print(a+" ");
}
private static void insertsort(int[] nums){
int len=nums.length;
if(len<2) return;
for(int i=1;i<len;++i){ //从第二个元素开始,进行插入
for(int j=i-1;j>=0 && nums[j]>nums[j+1];--j){ //插入的元素要和它前边已经排好序的进行比较
int temp=nums[j+1]; //用数据交换代替数据后移
nums[j+1]=nums[j];
nums[j]=temp;
}
}
}
}
如果在插入的元素的时候,对于比较的操作,进行类似二分查找的思想应用的话,就叫做折半插入排序算法,在最坏情况下好于直接插入,在最好情况下坏与直接插入,平均时间复杂度为O(n^2)
相关文章推荐
- MySQL各种日志介绍
- ubuntu 关闭外界设备自动打开
- Windows中还原文件打开方式为未知打开方式
- 2015年总结
- DDL DML DCL语句
- phpstorm破解码
- 设置浏览器默认滚动条(谷歌)
- 在Spring应用中创建全局获取ApplicationContext对象<未完待续>
- nginx、fastCGI、php-fpm关系梳理
- C++流程控制中用于跳转的return和goto语句学习教程
- 利用python将alfw转换成bing标注格式
- springjunit 测试类SpringJUnit4ClassRunner
- C++ 虚函数表解析
- Mysql中设置自增长起始值和递增值
- mysql优化技巧《转》
- IOS JSON数据解析(一)
- Android系统移植与调试之------->如何修改Android的默认语言、默认时区
- insert into on duplicate key update与update inner join使用效果对比分析
- 皓月,幽室,静坐,轻弹纤细的筝弦
- [递归和循环]面试题8