初入算法门——《啊哈!算法》代码实现

突然想要记录一下自己写算法的过程,也算是自我的督促!


《啊哈!算法》是一本非常有趣可爱的算法书,这也是我把它作为入门算法第一步的原因~那么就开始吧。
第一个代码块 第一章 1.2 冒泡排序

public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int N=sc.nextInt();
        int[] test=new int[N];
        for(int i=0;i<N;i++){
            test[i]=sc.nextInt();
        }
        for(int i=0;i<N;i++){
            for(int j=i+1;j<N;j++){
                if(test[i]<test[j]) {
                    int temp;
                    temp = test[i];
                    test[i] = test[j];
                    test[j] = temp;
                }
            }
        }
        System.out.println(test);
    }

经典排序,不用说。
第二个,快速排序。我真是太菜了快排改代码都要晕乎半天(…)第一章 1.3 快速排序

static int[] a={0,2,3,2,2,9,3,7};
    public static void quicksort(int left,int right){
        int i=left;
        int j=right;
        if(left>right)
            return;
        int basic=a[left];
        while(i!=j){
            while(a[j]>=basic&&i<j)
                j--;
            while(a[i]<=basic&&i<j)
                i++;
            int temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
        int temp=a[i];
        a[i]=a[left];
        a[left]=temp;
        quicksort(left,i-1);
        quicksort(i+1,right);
    }

非常快,现在第一章只剩下最后一个难题了。小哼买书题目:www.tianchai.org/problem-12001.html
我真是太太太菜了,不得不改用列表才勉强用快排实现。书上有桶排序和冒泡排序的代码,这里就不作列出了。(偷懒ing)

public static void quicksort(ArrayList<Integer> a,int left,int right){
        int i=left;
        int j=right;
        if(left>right)
            return;
        int basic=a.get(left);
        while(i!=j){
            while(a.get(j)>=basic&&i<j)
                j--;
            while(a.get(i)<=basic&&i<j)
                i++;
            Collections.swap(a,i,j);
        }
        Collections.swap(a,left,i);
        quicksort(a,left,i-1);
        quicksort(a,i+1,right);
    }
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int N=sc.nextInt();
        ArrayList<Integer> test=new ArrayList();
        for(int i=0;i<N;i++){
            test.add(sc.nextInt());
        }
        quicksort(test,0,test.size()-1);
        for(int i=1;i<test.size();){
            if(test.get(i)==test.get(i-1)){
                test.remove(i);
            }
            else
                i++;
        }
        System.out.println(test);
    }

嘛,第一章就到此结束了(。)第二章江湖再会

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值