算法学习

116 阅读1分钟

1.插入排序

public static int[] insertionSort(int[] a){
        int key;
        int i;
        for (int j = 1; j < a.length; j++) {
            key = a[j];
            i = j-1;

            while(i > -1 && a[i] > key){
                a[i+1] = a[i];
                i = i-1;
            }
            a[i+1] = key;
        }
        return a;
    }

2. 二进制整数相加

把两个n位二进制,将和存储到一个(n+1)数组C中

    public static int[] add_binary(int[] a,int[] b){
        int[] c = new int[a.length+1];

        int carry = 0;
        int i;
        for (i = 0; i < a.length; i++) {
            c[i] = (a[i]+b[i]+carry)%2;//余数
            carry = (a[i]+b[i]+carry)/2;//进位
        }
        c[i] = carry;
        return c;
    }

3. 选择算法

首先找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置,再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。

/**
     * 选择算法
     * @param c
     */
    public static int[] select_sort(int[] a){
        int min;//index
        int temp;
        for(int i = 0;i < a.length;i++){
            min = i;
            for(int j = i+1;j < a.length;j++){
                if(a[j] < a[min]){
                    min = j;
                }
            }
            temp = a[i];
            a[i] = a[min];
            a[min] = temp;
        }
        return a;
    }

摘抄自《算法导论》