简单的算法记录

一、冒泡排序

import java.util.Scanner;

public class Homework10Zzy1 {
    static Scanner scan = new Scanner(System.in);

    /**
     * @description
     * @author jule_zhou
     * @date 2022-07-15 13:43:49
     * @param args
     * @return
     */
    public static void main(String[] args) {
    	//输入提示
        System.out.println("请输入5名同学的成绩:");
        //声明数组变量
        int [] scoreArray = new int[5];
        //遍历输入
        for (int i = 0; i < scoreArray.length; i++) {
            scoreArray[i] = scan.nextInt();
        }
        //输出提示
        System.out.print("学员成绩按降序排列:");
        int min = 0;
        // 大---->小
        //冒泡排序
        for (int i = 0; i < scoreArray.length - 1; i++) {
            for (int j = 0; j < scoreArray.length -i -1; j++) {
            	//判定大小,将符合条件的两者交换位置
                if (scoreArray[j+1] > scoreArray[j]){
                    min =scoreArray[j];
                    scoreArray[j] = scoreArray[j+1];
                    scoreArray[j+1] = min;
                }
            }
        }
        //输出数组
        for (int i = 0; i < scoreArray.length; i++) {
            System.out.print(scoreArray[i] + "\t");
        }

        System.out.print("\n学员成绩按升序排列:");
        //小---->大
        for (int i = 0; i < scoreArray.length - 1; i++) {
            for (int j = 0; j < scoreArray.length - i - 1; j++) {
                if (scoreArray[j] > scoreArray[j + 1]){
                    int max = scoreArray[j];
                    scoreArray[j] = scoreArray[j + 1];
                    scoreArray[j + 1] = max;
                }
            }
        }
        //输出数组
        for (int i : scoreArray) {
            System.out.print(i + "\t");
        }
    }
}

二、选择排序

三、插入排序

public class Homework10Zzy3 {
    /**
     * @description 插入排序
     * @author jule_zhou
     * @date 2022-07-16 7:47:53
     * @param args
     * @return
     */
    public static void main(String[] args) {
        int num[] = {5,6,4,8,2,3,1,7,0,9};
        
        for (int i = 1; i < num.length; i++) {
            int id = num[i];
            int j = i - 1;
            //循环后移
            while (j >= 0 && num[j] > id){
                num[j + 1] = num[j];
                j--;
            }
            num[j + 1] = id;
        }
        //输出结果
        for (int i : num) {
            System.out.println(i);
        }
    }
}

四、归并排序

import java.util.Arrays;

public class Homework10Zzy4 {
    /**
     * @description
     * @author jule_zhou
     * @date 2022-07-15 19:44:48
     * @param args
     * @return
     */
    public static void main(String[] args) {
        int num[] = {5,6,4,8,2,3,1,7,0,9};
        int tempArray[ ] = Arrays.copyOf(num,num.length);
        msort(num,tempArray,0,num.length - 1);

        for (int i = 0;i < num.length;i ++){
            System.out.println(num[i]);
        }
    }
    /**
     * @description 区域划分
     * @author jule_zhou
     * @date 2022-07-16 10:55:39
     * @param array 数组
     * @param tempArr 临时数组
     * @param left 最左侧下标
     * @param right 最右侧下标
     * @return
     */
    public static void msort(int[] array ,int[] tempArr,int left ,int right){
        if (left <right){
            int mid = (left + right) / 2;
            //左半区划分
            msort(array, tempArr, left, mid);
            //右半区划分
            msort(array, tempArr, mid + 1, right);
            //合并已经排序的部分
            merge(array,tempArr,left,mid,right);
        }
    }
    /**
     * @description 归并排序
     * @author jule_zhou
     * @date 2022-07-16 10:55:56
     * @param array 数组
     * @param tempArr 临时数组
     * @param left 最左侧下标
     * @param mid 中间值下标
     * @param right 最右侧下标
     * @return
     */
    public static void merge(int[] array,int[] tempArr,int left,int mid,int right){
        //标记左半区第一个未排序的元素
        int l_pos = left;
        //标记右半区第一个未排序的元素
        int r_pos = mid + 1;
        //临时数组
        int pos =left;

        //合并
        while (l_pos <= mid && r_pos <= right){
            if (array[l_pos] < array[r_pos]){
                //左半区第一个剩余元素更小
                tempArr[pos++] = array[l_pos ++];
            }else {
                //右半区第一个剩余元素更小
                tempArr[pos++] = array[r_pos ++];
            }
        }

        //合并左半区剩余元素
        while (l_pos <= mid){
            tempArr[pos++] = array[l_pos ++];
        }
        //合并右半区剩余元素
        while (r_pos <= right){
            tempArr[pos++] = array[r_pos ++];
        }

        //把临时数组中合并后的元素复制会原来的数组
        while (left <= right){
            array[left] = tempArr[left];
            left ++;
        }
    }
}

五、快速排序

public class Homework10Zzy5 {
    /**
     * @description 快速排序
     * @author jule_zhou
     * @date 2022-07-16 10:54:12
     * @param args
     * @return
     */
    public static void main(String[] args) {
        int[] numArray={11,24,5,32,50,34,54,76};
        qsort(numArray,0,numArray.length - 1);
        for (int i : numArray) {
            System.out.println(i);
        }
    }
    /**
     * @description 递归划分
     * @author jule_zhou
     * @date 2022-07-16 10:56:20
     * @param numArray 数组
     * @param left 最左侧下标
     * @param right 最右侧下标
     * @return
     */
    public static void qsort(int[] numArray,int left,int right){
        if (left < right){

            int mid = part(numArray,left,right);
            qsort(numArray,left,mid - 1);
            qsort(numArray, mid + 1,right);
        }
    }
    /**
     * @description 快速排序
     * @author jule_zhou
     * @date 2022-07-16 10:56:24
     * @param numArrays 数组
     * @param left 最左侧索引位置
     * @param right 最右侧索引位置
     * @return {@link int} 划分位置
     */
    public static int part(int[] numArrays,int left,int right){
        int pos = numArrays[right];
        int i = left;

        for (int j =left;j < right; j ++){
            //比pos小的换到前面去
            if (numArrays[j] < pos){
                int temp =numArrays[j];
                numArrays[j] = numArrays[i];
                numArrays[i] = temp;
                i ++;
            }
        }
        //此时,i指向的元素一定大于等于pos
        int temp =numArrays[right];
        numArrays[right] = numArrays[i];
        numArrays[i] = temp;
        return i;
    }
}

六、二分法

二分法应用前提:数组必须已经排列好顺序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jule_zhou

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

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

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

打赏作者

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

抵扣说明:

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

余额充值