排序

1、冒泡排序

基本思想:

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

import java.util.Scanner;

public class BubbleSort {
    public static void main(String[] args) {
        int len;
        System.out.println("请输入数组的长度!");
        Scanner sc = new Scanner(System.in);
        len = sc.nextInt();
        int[] arr = new int[len];
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第"+i+"个值");
            arr[i] = sc.nextInt();        
        }
        show(arr);
        System.out.println("排序后:");
        show(sort(arr));
    }
    //打印数组
    public static void show(int[] arr) {
        System.out.println("输出当前数组:");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(i+"----"+arr[i]);
        }
    }
    //冒泡排序
    public static int[] sort(int[] arr) {
        int swap;
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-i-1; j++) {
                if(arr[j]>arr[j+1]){
                    swap = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = swap;
                }
            }
            
        }
        return arr;
    }
    
}
View Code

2、简单选择排序

基本思想:

在要排序的一组数中,选出最小(或者最大)的个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后个数)比较为止。

public class SelectionSort {      
    
    private static int[] paixu(int[] arr) {
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = i; j < arr.length-1; j++) {
                if (arr[i]>arr[j+1]) {
                    swap(arr,i,j+1);
                }
            }
        }
        return arr;
    }
    public static int[] swap(int[] arr,int x,int y) {
        int swap;
        swap = arr[x];
        arr[x] = arr[y];
        arr[y] = swap;
        return arr;
    }
    private static void dayin(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
    public static void main(String[] args) {
        int[] arrTest = {4,2,1,6,3,6,0,-5,1,1};
        System.out.println("前:");
        dayin(arrTest);
        System.out.println();
        System.out.println("后:");
        dayin(paixu(arrTest));
    }
}
View Code

 3、插入排序

public class SelectSort {
    public static void selectSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            for (int j = i;(j>0)&&(arr[j]<arr[j-1]);j--) {
                    swap(arr,j,j-1);
            }
        }
    }
    
    public static void swap(int[] arr,int x,int y) {
        int swap;
        swap = arr[x];
        arr[x] = arr[y];
        arr[y] = swap;
    }
    public static void main(String[] args) {
        int[] a = {4,2,6,1,3,6};
        selectSort(a);
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }
    }
}
View Code

解析:如果目标是把n个元素的序列排序:最好的情况就是序列已经升序排列了,在这种情况下,需要进行n-1次比较操作即可。最坏就是降序排列,此时需要比较的次数是n(n-1)/2;

猜你喜欢

转载自www.cnblogs.com/xingrui/p/7465558.html