末日搭车指南
面向人生编程

导航

 

冒泡排序法

public static void main(String[] args) {

        int arr[] = {8, 5, 3, 2, 4};

        //冒泡
        for (int i = 0; i < arr.length; i++) {
            //外层循环,遍历次数
            for (int j = 0; j < arr.length - i - 1; j++) {
                //内层循环,升序(如果前一个值比后一个值大,则交换)
                //内层循环一次,获取一个最大值
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

选择排序

//将 i 前面的当作是已经排好序的,后面是无序的。在i后面无序中选择出最小的那个值,和i的值进行替换

public
static void main(String[] args) { int arr[] = {6, 5, 3, 2, 4}; //选择 for (int i = 0; i < arr.length; i++) { //默认第一个是最小的。 int min = arr[i]; //记录最小的下标 int index = i; //通过与后面的数据进行比较得出,最小值和下标 for (int j = i + 1; j < arr.length; j++) { if (min > arr[j]) { min = arr[j]; index = j; } } //然后将最小值与本次循环的,开始值交换 int temp = arr[i]; arr[i] = min; arr[index] = temp; //说明:将i前面的数据看成一个排好的队列,i后面的看成一个无序队列。每次只需要找无需的最小值,做替换 } }

插入排序:默认将i左边看成有序列表,后面无序的列表循环每一个数据,如果比前面的数据小则交换

public static void main(String[] args) {

        int arr[] = {7, 5, 3, 2, 4};

        //插入排序
        for (int i = 1; i < arr.length; i++) {
            //外层循环,从第二个开始比较
            for (int j = i; j > 0; j--) {
                //内存循环,与前面排好序的数据比较,如果后面的数据小于前面的则交换
                if (arr[j] < arr[j - 1]) {
                    int temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                } else {
                    //如果不小于,说明插入完毕,退出内层循环
                    break;
                }
            }
        }
    }

 快速排序:

 

package test;

public class sort4 {
    public static void main(String[] args) {
    int arr[] = {7, 5, 3, 2, 4};
//快速排序   
    int l=0;
    int r=arr.length-1;
    quickSort(arr,l,r);
    
      for(int i=0;i<arr.length;i++) {
            System.out.println(arr[i]);
        }

    }

    private static void quickSort(int[] arr, int l, int r) {
        if(l<r) {

            int i=l;   //复制 l和r的值是因为 后面递归的时候要用到l,r
            int j =r;
            //记录一下这次要找的是哪个值
            int temp=arr[i];
            //此时 arr[i]是空的            
            while(i!=j) {
                //从右边找第一个大于temp的数
                while(i<j&&arr[j]>temp)j--;
                arr[i]=arr[j];
                //将找到的arr[j]填写到空出来的arr[i]的位置,
                //此时arr[j]变成空的
                while(i<j&&arr[i]<temp)i++;
                arr[j]=arr[i];
                //此时arr[i]变成空的    
            }
            //当最后i=j的时候,就找到的temp的正确位置
            arr[i]=temp;
            quickSort(arr,l,i-1);
            quickSort(arr,i+1,r);
        }

    }
    
}

 

 

 

posted on 2020-10-04 14:28  末日搭车指南  阅读(114)  评论(0编辑  收藏  举报