数据结构---查找和排序

几种常见的排序:冒泡,插入,选择,快速,归并排序

关系:排序是查找的前提

代码

1.冒泡排序(BubbleSort)

public class BubbleSort {
    /**     * 
     * 冒泡排序
     * 从第一个元素开始依次和后面的元素比较,并交换位置
     * 从第二个元素开始依次和剩下的元素比较,并交换位置
     * 如此往复
     */
    public static void main(String[] args) {
        Integer[] arr = { 4, 5, 9, 8, 1, 2, 6, 7, 3 };
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    //每比较一次就就交换一次位置
                    int mid = arr[i];
                    arr[i] = arr[j];
                    arr[j] = mid;
                }
            }
        }
    }
}

2  快速排序

public class FastSort {
    /**
     * 快速排序
     * 先定义一个min代表当此循环的最小元素的下标
     * 先比较得到数组中最小的元素,然后与第一个元素交换位置
     * 然后在剩下的数组中找到最小的元素,与第二个元素交换位置
     * 如此往复
     */
    public static void main(String[] args) {
        Integer[]  arr = {4,5,9,8,1,2,6,7,3};
        for(int i =0;i<arr.length;i++){
            int min = i; 
            //先不断比较得到最小值的下标
            for(int j=i+1;j<arr.length;j++){
                if (arr[min]>arr[j]) 
                    min=j;
            }
            //本次循环比较完毕后再交换位置
            int  mid = arr[i];
            arr[i]=arr[min];
            arr[min] = mid;
        }
    }
}

3 插入排序

public class InsertSort {
    /**
     * 插入排序
     * 把待排序数组看成2部分:有序部分和无序部分
     * 有序部分从0开始向后排序,依次循环到最后一个元素
     */
    public static void main(String[] args) {
        Integer[] arr = { 4, 5, 9, 8, 1, 2, 6, 7, 3 ,0};
        for (int i = 0; i < arr.length; i++) {
            //长度为i的数组内,第i个依次和前面的比较并排序
            for (int j = i; j > 0; j--) {
                if (arr[j] < arr[j - 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = temp;
                }
            }
        }
    }
}

4 .选择排序

public class ChooseSort {

    /**
     * 选择排序:
     * 每次从未排序序列中选出最小元素
     * 和前面已排序序列的最后一个交换位置
     */
    public static void main(String[] args) {
        Integer[] arr = { 8, 1, 3, 5, 2, 9, 0, 7, 4 };
        for (int i = 0; i < arr.length-1; i++) {
            int min = i;
            //找到该次剩余元素的最小值
            for (int j = min + 1; j < arr.length; j++) {
                if (arr[min] > arr[j]) {
                    min = j;
                }
            }
            //与已排序的序列的最后一个值交换位置
            int temp = arr[min];
            arr[min] = arr[i];
            arr[i] = temp;
        }
        System.out.println(11);
    }

}

猜你喜欢

转载自blog.csdn.net/stonennnn/article/details/82781917