4-28算法初探:冒泡排序、选择排序、直接插入、二分查找、数组不重复随机数生成

一、冒泡排序算法

冒泡排序在前面已经写过几次了

http://t.csdn.cn/EyJKhicon-default.png?t=M3K6http://t.csdn.cn/EyJKh

二、选择排序算法

选择排序

在这里插入图片描述

 

package com.qf.stu.search;

import java.util.Arrays;

//选择排序法
public class Test5 {
    public static void main(String[] args) {
        int[] arrays=new int[]{-40,35,70,10,33,-89,60};
        for (int i=1;i<arrays.length;i++){
            int minindex=i-1;
            for (int j=i;j<arrays.length;j++){
                if (arrays[minindex]>arrays[j]){
                    minindex=j;
                }
            }
            arrays[minindex]=arrays[minindex]+arrays[i-1];
            arrays[i-1]=arrays[minindex]-arrays[i-1];
            arrays[minindex]=arrays[minindex]-arrays[i-1];
        }
        System.out.println(Arrays.toString(arrays));
    }
}

三、直接插入算法

就想整理扑克牌一样在这里插入图片描述

package com.qf.stu.search;
import java.util.Arrays;
//插入排序
public class Test6 {
    public static void main(String[] args) {
        int[] nums={-40,35,70,10,33,-89,60};
        search(nums);
    }
    public static void search(int[]nums){

        for (int i=1;i<nums.length;i++){
            int index=i;
            for (int j=i-1;j>=0;j--){
                if (nums[index]<nums[j]){
                    nums[index]=nums[index]+nums[j];
                    nums[j]=nums[index]-nums[j];
                    nums[index]=nums[index]-nums[j];
                    index--;
                }
            }
        }
        System.out.println(Arrays.toString(nums));
    }
}

四、二分查找算法

//二分查找算法
package com.qf.stu.search;

import java.util.Arrays;

public class Test4 {
    public static void main(String[] args) {
        int[] nums = new int[]{10, 30, 50, 70, 90, 100, 110};
        System.out.println(Arrays.binarySearch(nums, 0, 6, 30));
        System.out.println(search(nums, 30, 0, 6));
    }
    public static int search(int[] nums,int num,int starindex,int endindex){
        starindex=0;
        endindex=nums.length-1;
        while (starindex<=endindex){
            int index=(starindex+endindex)/2;
            if (num>nums[index]){
                starindex=index+1;
            }else if (num<nums[index]){
                endindex=index-1;
            }else {
                return index;
            }
        }
        return -1;
    }
}
Arrays类中的binarySearch方法也是通二分查找法编写的
 private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                     int key) {
        int low = fromIndex;
        int high = toIndex - 1;

        while (low <= high) {
            int mid = (low + high) >>> 1;
            int midVal = a[mid];

            if (midVal < key)
                low = mid + 1;
            else if (midVal > key)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.
    }

五、数组中不重复随机数生成算法

1.生成随机数,判断是否和之前的随机数相等,再放入数组中

package com.qf.stu.search;

import java.util.Arrays;
import java.util.Random;

public class Test3 {
    public static void main(String[] args) {
        search();
    }
    public static void search(){
        int[]nums=new int[100];
        for (int i=0;i<nums.length;i++){
            nums[i]=i+1;
        }
        int[] result=new int[10];

        boolean flag;
        Random r=new Random();
        for (int i=0;i<result.length;i++){
            flag=true;
            while (flag) {
                boolean b=true;
                int index = r.nextInt(nums.length);
                for (int j=0;j<result.length;j++){
                    if (nums[index]==result[j]){
                        b=false;
                        break;
                    }
                }
                if (b){
                    result[i]=nums[index];
                    flag=false;
                }

            }

        }
        System.out.println(Arrays.toString(result));

    }
}

2.将已经生成的随机数放到数组最后面,将他排除在外

package com.qf.stu.search;

import java.util.Arrays;
import java.util.Random;

public class Test1 {
    public static void main(String[] args) {
        int[]nums=new int[10];
        for (int i=0;i<nums.length;i++){
            nums[i]=i+1;
        }
        int[]result=new int[10];
        search(nums,result);
    }
    public static void search(int[]nums,int[]result){
        //在nums数组中生成一个随机数,将值赋给result数组,将随机数和数组后面的数互换
        int temp=0;
        Random r=new Random();
        for (int i=0;i<result.length;i++){
            int index = r.nextInt(nums.length -i);
            result[i]=nums[index];
            temp=nums[index];
            nums[index]=nums[nums.length-1-i];
            nums[nums.length-i-1]=temp;
        }
        System.out.println(Arrays.toString(result));
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值