Java学习笔记<十八>(冒泡排序和插入排序)

冒泡排序

import org.junit.Test;

import java.util.Arrays;
//冒泡排序
public class 冒泡排序 {
 @Test
 public void a1(){
     int[] arr=new int[]{5,4,2,6,1,8,9,0,3,7};
     System.out.println(Arrays.toString(arr));
     //冒泡排序0-9
     int tmp = 0;
     for (int j = 0; j <arr.length ; j++) {
         for (int i=0;i<arr.length-j-1;i++){
             if (arr[i+1]<arr[i]){
                 tmp=arr[i];
                 arr[i]=arr[i+1];
                 arr[i+1]=tmp;
             }
         }
     }
     System.out.println(Arrays.toString(arr));
 }

 @Test
 public void a2(){
     int[] arr = new int[]{5,6,3,2,1,4,7,0,8,9};
     System.out.println(Arrays.toString(arr));
     int tmp=0;
     for (int i = 0; i < arr.length; i++) {
         //flag为真表示有序
         Boolean flag=true;
         for (int j = 0; j < arr.length-i-1; j++) {
             if (arr[j]>arr[j+1]){
                 tmp=arr[j];
                 arr[j]=arr[j+1];
                 arr[j+1]=tmp;
                 //if条件成立说明数组不是有序的
                 flag=false;
             }
         }
         if (flag){
             break;
         }
     }
     System.out.println(Arrays.toString(arr));
 }

 @Test
 public void a3(){
     int[] arr=new int[]{4,2,3,1,0,7,9,5,6};
     //最后交换顺序的位置
     int lastindex=0;
     //有序范围,首先假设全部有序
     int sortborder=arr.length-1;
     int tmp=0;
     for (int i = 0; i < arr.length; i++) {
         //有序标签.假设全部有序
         boolean flag=true;
         for (int j = 0; j < sortborder; j++) {
             if (arr[j]>arr[j+1]){
                 tmp=arr[j];
                 arr[j]=arr[j+1];
                 arr[j+1]=tmp;
                 //交换顺序
                 flag=false;
                 //改变最后交换顺序的位置
                 lastindex=j;
             }
         }
         //逐次缩小比较的范围
         sortborder=lastindex;
         if (flag){
             //没进入过交换顺序的话,说明已经有序,跳出循环
             break;
         }
     }
     System.out.println(Arrays.toString(arr));
 }

}

冒泡排序的原理:就是两个数进行前后对比,有两个循环,循环一次,把最小的值放到外层循环开始的最前面

插入排序

import java.util.Arrays;

//快速排序
public class 快速排序 {

 public static void main(String[] args) {
     int[] arr=new int[]{52, 49, 80, 36, 14, 58, 61, 97, 23, 75};
     quicksort qk=new quicksort();
     qk.arr=arr;
     int[] res = qk.sort(0, arr.length - 1);
     System.out.println(Arrays.toString(res));
 }

 static class quicksort{
     int[] arr;
     int[] sort(int low,int high){
         int i,j,t,tmp;
         if (low>high){
             return arr;
         }
         i=low;
         j=high;
         tmp = arr[low];//基准
         while (i!=j){
             //先从右向左找小于基准的数
             while (i<j && arr[j]>=tmp){
                 j--;
             }
             //再从左向右找大于基准的数
             while (i<j && arr[i]<=tmp){
                 i++;
             }
             //交换上边两个数的位置
             if(i<j){
                 t=arr[i];
                 arr[i]=arr[j];
                 arr[j]=t;
             }
             //循环交换位置,直到i==j退出循环,此时i的位置是基准该在的位置
         }
         //交换基准和循环得到的索引
         arr[low]=arr[i];//arr[low]就是tmp,这里不用再作临时变量了
         arr[i]=tmp;
         //递归处理基准左边数组
         sort(low,i-1);
         //递归处理基准右边数组
         sort(i+1,high);
         return arr;
     }
 }
}

插入排序的原理说明

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腊Rou单车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值