排序算法(1)

前段时间总结几种基础的排序算法

1.直接插入排序

原理:默认arr的前i-1个数据是有序的,找到第i个数据应该插入的位置。
         将要插入的第i个数据与第i-1号下标比较, *若i>i-1 说明任然有序,继续i+1个数据
                                                                         *若i<i-1     则arr[j+1]=arr[j]  继续与i-2个数据比较

以此类推 最后插入到找到的数据前。

public static void sort(int[]  arr){
        int temp;
        for (int i=1;i<arr.length;i++){
            if (arr[i]<arr[i-1]){//如果  需要排序
                temp=arr[i];//保存目标的数据
                int j;
                for ( j=i-1;j>=0 && arr[j]>temp;j--){//找到第一个比目标数据小的位置
                        arr[j+1]=arr[j];//比目标大的数据 依次往后
                }
                arr[j+1]=temp;
            }
        }
    }

 

2. 选择排序

原理:简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换。以此类推,一直到待排序的数列中只有一个元素时为止。

private static void sort(int[] arr) {
        int temp,i,j,index=0;
        for ( i=0; i<arr.length-1;i++) {//第一趟 先给第1个下标找到最小的值
            index=i;//用下标来记录数组最小的值的位置
            for (j=i+1; j<arr.length;j++){//遍历来找到位置
                if (arr[j]<arr[index]){
                    index=j;//最小值的位置
                }
            }
            temp=arr[index];
            arr[index]=arr[i];
            arr[i]=temp;
        }
    }

插入排序和选择排序可以对照来理解:插入排序把每个数据放到合适的位置

                                                        选择排序是给每个位置找到合适的元素

 

3.冒泡排序

原理:冒泡排序每一趟循环就是比较i和i+1这两个数,把较大的数放到后面,这样一趟下来最大的数就放到了最后

           第二趟也是同理,不过每一趟都少遍历一个数,也就是上一趟确定的最大的那个数

这张图非常形象

public static void bubbleSort(int[] arr){
        for (int i=0;i<arr.length-1;i++){
            //找到当前数组最大的值 放到数组最后 下次遍历少一个数
            for (int j=0;j<arr.length-i-1;j++){
                if (arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }

//        System.out.println(Arrays.toString(arr));
    }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值