排序1.简单排序

排序可分为内排序和外排序
内排序针对的是小数组,在内存中完成
外排序针对的是多个文件,在外存中完成
简单排序的复杂度普遍是O(n2)

冒泡排序

冒泡的意思就是小的数从下面浮上去,也就是从最后一个开始j与前面的j-1比较,直到比较到i。直到执行完一轮之后,第一个数就是全数组最小的数。执行n-1轮即可完成排序.i表示的是排序好的位置,j表示的是此轮比较的位置。
算法的复杂度稳定为O(n),排序不稳定,如果定义相同不交换则稳定

 public void sort(int[] arr) {
        for(int i=0;i<arr.length-1;i++){
            for(int j=arr.length-1;j>i;j--){
                if(arr[j]<arr[j-1]){
                    swap(arr,j,j-1);
                }
            }
    }

选择排序

选择排序就是每轮都选一个最小的数放到最前面,用i来表示已经放好的位置,排序的复杂度保持不变为O(n2),不稳定

     public void sort(int[] arr) {
       for(int i=0;i<arr.length-1;i++){
           int min=0;
           for(int j=i;j<arr.length;j++){
               if(arr[j]<min){
                   min=j;
               }
           }
           swap(arr,i,min);
       }
    }

插入排序

将当前元素插入到之前已经排序好的队列中,需要注意的是i是从0到arr.length-1了,因为最后一个数也要往前排,还有条件是加到for循环之中了,这样就导致有的遍历可以省去,所以插入排序的最好复杂度为O(n),最坏为O(n2),平均为O(n2),不稳定。但可以通过设置相等的不交换来保持稳定。

 public void sort(int[] arr) {
       for(int i=0;i<arr.length;i++){
           for(int j=i;j>0 && arr[j]<arr[j-1];j--){
               swap(arr,j,j-1);
           }
       }
    }

在工程中数组长度很短时仍采用插入排序,因为它比较快而且可以保持稳定也可以保持不稳定,所以可以比较基本数据类型也可以比较对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值