java中几中常见的排序方式汇总及二分法查找

1.交换排序

代码实现

public static void main(String[] args){

int [] nums=new int[]{15,23,35,8,80,68,6};

for(int i=0;i<nums.length-1;i++){      //从第一个数开始取一直取到倒数第二个数
for(int j=i+1;j<nums.length;j++){    //将外层循环取出来的每一个数依次和它后面的每一个数进行比较
if(nums[i]>nums[j]){                       //只要遇到比它小的数,就将两个数交换位置
 int mid=nums[i];                           //每一轮结束就把本轮比较中最小的数排在下标为i的位置
 nums[i]=nums[j];
nums[j]=mid;
}
}
}

                                                                                     //外层循环结束,排序完成!

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

   }


2.冒泡排序

代码实现

                 public static void main(String[] args){

         int [] nums=new int[]{15,23,35,8,80,68,6};

                         for(int i=nums.length;i>0;i--){     //将数组中最大的数下沉到i这个下标位置
for(int j=0;j<nums.length-1;j++){      //从第一个数开始,两两进行比较。将本轮中最大的数下沉到j+1=i这个位置
if(nums[j]>nums[j+1]){      //只要前面的数大于后面的数就交换位置
int mid=nums[j];
nums[j]=nums[j+1];
nums[j+1]=mid;
}
}
}
                                                                          //外层循环结束,排序完成!
for(int i=0;i<nums.length;i++){
System.out.print(nums[i]+"\t");
}

     }

3.选择排序

代码实现

      public static void main(String[] args){

int [] nums=new int[]{15,23,35,8,80,68,6};

          
for(int i=0;i<nums.length;i++){                 //假定下标为i的数就是本轮中最小的那个数
int k=i;                                                  //k的作用:验证假定是否正确
for(int j=i+1;j<nums.length;j++){    //将当前项依次和后面的所有项进行比较
if(nums[k]>nums[j]){          
k=j;        //只要有比当前项小的,就将k的值重新赋值(即下标k总是指向本轮中最小的数)
}
}
if(k!=i){            //判断是否有比下标为i的数更小的数
int mid=nums[k];              //如果有假定错误,就将最小的数放到下标为i的项里
nums[k]=nums[i];
nums[i]=mid;
}
}

                 for(int i=0;i<nums.length;i++){                                                      //外层循环结束,排序完成!
System.out.print(nums[i]+"\t");
}

    }

4.插入排序

代码实现

      public static void main(String[] args){

int [] nums=new int[]{15,23,35,8,80,68,6};

                for(int i=1;i<nums.length;i++){    //假定第一个数就是最小的,从第二个数开始取一直取到最后一个数
for(int j=i-1;j>=0;j--){                      //将取出的数依次和它前面的数进行比较
if(nums[j]>nums[j+1]){         //两两进行比较,只要有比它大的就交换(完成标i及之前的项的排序)
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}                 
}
}
                                                                //外层循环结束,排序完成!
for(int i=0;i<nums.length;i++){
System.out.print(nums[i]+"\t");
}

5二分法查找

只适合有序的样本

代码实现

       public static void main(String[] args){

int [] nums=new int[]{8,12,15,23,35,68,80};

                System.out.print("请输入要查找的数:");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
int low=0,upper=nums.length-1;
int mid=0,findIndex=-1;
while(low<=upper){
mid=(low+upper)/2;
if(nums[mid]>num){
upper=mid-1;
}else if(nums[mid]<num){
low=mid+1;
}else{
findIndex=mid;
break;
}
}
if(findIndex>=0){
System.out.print("在下标"+findIndex+"处找到该数:"+nums[findIndex]);
}
else{
System.out.print("未找到该数");
}

input.close();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值