一些排序算法

1.冒泡

public static void Mppai(int[] a){
    int temp;
    swap(a);
    for(int i = 0; i<a.length-1; i++ ){
        for(int j = 0; j<a.length-i-1; j++) {
            if(a[j] > a[j+1]){
                temp = a[j+1];
                a[j+1] = a[j];
                a[j] = temp;

            }

        }

    }
    swap(a);

}


public static void swap(int[] arr){
    for(int i :arr){
        System.out.print(i+" ");
    }
}

2.快速

public static void kuaisu(int[] a){
    int temp;
    swap(a);
    for(int i = 0 ; i < a.length ; i ++){
        temp = i;
        for(int j = i + 1 ; j < a.length ; j++){
            if(a[temp] > a[j] ) {
                temp = j;
            }
        }
        slap(a,i ,temp);
    }
    swap(a);

}

public static void swap(int[] arr){
    for(int i :arr){
        System.out.print(i+" ");
    }
}


public static void slap(int[] arr , int i , int j){
    int tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp ;
}

3.插入

public static void charu(int arr[]){
    swap(arr);
    for(int i = 1 ;i < arr.length ; i++) {
            int key = arr[i] ;
            int j = i - 1 ;
            while( j >= 0 && arr[j] > key ){
                arr[j+1] = arr[j] ;//大数后退
                j--;
            }

            arr[j+1] = key ;
    }
    swap(arr);
}


public static void swap(int[] arr){
    for(int i :arr){
        System.out.print(i+" ");
    }
}

4.希尔

public static void xier(int arr[]){
    int d = arr.length;
    swap(arr);
    while(true) {

        d = d / 2 ; //每次分组区间为之前的一半

        for (int i = 0; i < d; i++) {

            //进入快排;
            for(int j = i + d ; j < arr.length ; j++){
                int tmp = arr[j];
                int x = j - d;
                 while(x >= 0 && arr[x] > tmp ){

                     arr[x + d] = arr[x];
                     x = x - d ;
                }
                arr[x+d] = tmp ;
            }
            swap(arr);
        if (d == 1){
            break;

            }
        }
        }
    }

public static void swap(int arr[]) {
    for (int a : arr) {
        System.out.print(a);

    }


}

5.归并

 

    public static void g(int arr[] , int left ,int right){


        if(left < right){

            int mid = (left + right) / 2 ;

            g(arr , left ,mid); //两边不断拆分
            g(arr , mid + 1 ,right); //两边不断拆分


            b(arr , left , right , mid);

        }


    }




    public static void b(int arr[], int left , int right , int mid){

        int i = left ;
        int j = mid + 1 ;
        int t = 0;

        int tmp[] = new int[arr.length];

        while(i <= mid && j <= right ){
            System.out.print("=============("+t+") " +"("+i+") "+"("+j+") "+"\n");
            if(arr[i] <= arr[j]){
                tmp[t++] = arr[i++];
            }else{
                tmp[t++] = arr[j++];
            }
            System.out.print("=============("+t+") " +"("+i+") "+"("+j+") "+"\n");
            swap(tmp);
            System.out.print("============="+"\n");

        }

        while(i<=mid){//将左边剩余元素填充进temp中
            tmp[t++] = arr[i++];
        }

        while(j<=right){//将右序列剩余元素填充进temp中
            tmp[t++] = arr[j++];
        }

        t = 0;

        //将temp中的元素全部拷贝到原数组中
        while(left <= right){
            arr[left++] = tmp[t++];
        }


    }

    public static void swap(int[] arr){
        for(int i :arr){
            System.out.print(i+" ");

        }
        System.out.println();
    }

}

6.快速

 

7汉诺塔

def move(n, a, b, c):
    if n ==1:
        print a, '-->', c
        return
    move(n-1, a, c, b)
    print a, '-->', c
    move(n-1, b, a, c)
move(4, 'A', 'B', 'C')

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值