java插入排序和冒泡排序

最近正在找工作,由于是找实习,被问到了很多的基础题,尤其是排序这一块,现在把自己熟悉的两中排序写出来,以供以后复习,

  • 冒泡排序

冒泡排序算法运行起来非常慢,但在概念上来说它又是最简单的,因此冒泡排序算法在刚开始研究排序技术时是一个非常好的算法。以下是冒泡排序要遵循的规则:

  1. 比较两个数据;

  2. 如果前面的数据比后面的数据大,则数据之间进行交换操作;

  3. 向后移动一个位置,比较下面两个数据;

  4. 但碰到第一个排好顺序的队员后,返回队列最前端重新开始下一趟排序.

public static void bubbleSort(int[] nums){
        int temp ; // 记录中间值
        int length = nums.length;
        for(int i = 0 ; i<length-1; i++){
            for(int j = i +1; j<length; j++ ){
                if(nums[i]>nums[j]){
                    temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;
                }
            }
        }

        for(int i = 0 ; i< nums.length; i++){
            System.out.print(nums[i]+"  ");
        }
    }

一般来说,数组中有N个数据项,第一趟排序中有N-1次比较,第二趟有N-2次,以此类推。这样算法作了n(n+1)/2次比较。

  • 插入排序
    插入排序算法是一个对少量元素进行排序的有效算法。插入排序的工作原理与打牌时整理手中的牌的做法类似,开始摸牌时,我们的左手是空的,接着一次从桌上摸起一张牌,并将它插入到左手的正确位置。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左进行比较,无论什么时候手中的牌都是排序好的。

    JAVA实现该算法如下:

public static void insertSort(int[] nums){
         int length=nums.length; //数组长度
         int j;               //当前值的位置  
         int i;               //指向j前的位置  
         int key;             //当前要进行插入排序的值  
         for(i=1;i<length;i++){
             key = nums[i];
             j = i - 1;
            //nums[i]比当前值大时,nums[i]后移一位,空出i的位置,好让下一次循环的值后移  
             while(j>=0&&key<nums[j]){
                //将大于key的往后移动一位
                 nums[j+1] = nums[j];
                 j--;
             }//跳出循环(找到要插入的中间位置或已遍历到0下标)  
             nums[j+1] = key;//将当前值插入
         }

nums[j]第一次进行右移时覆盖了nums[j+1]值,是否造成了数据丢失?
答:不会造成数据丢失,应为第一次右移前的i-1=j,此时nums[i]的值存在了key里了。每次右移都为下一次右移或插入留出了位置,这就是插入排序的关键点所在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值