排序常见的三种结构

选择排序(以递增排序为例):通过内部循环第一次遍历数组找到最小的元素与数组的第一个元素交换位置,第二次遍历数组找到第二小的元素与数组的第二个元素交换位置,当内存循环找到最小的元素并交换位置后下次遍历时应该避开这个最小元素。这种排序方法对任何结构的数组都是O(n²)的时间复杂度

private static void meth2() {
        // TODO Auto-generated method stub
        int[] num = { 2, 5, 7, 1, 4 };
        int min = 0;
        int length = num.length;
        for (int i = 0; i < (length - 1); i++) {
            min = i;
            for (int j = i + 1; j < length; j++) {
                if (num[j] < num[min]) {

                    min = j;
                }
            }
            int temp = num[min];
            num[min] = num[i];
            num[i] = temp;
        }
        System.out.println(Arrays.toString(num));

    }

插入排序(以递增排序为例):假定第一个元素为最小元素,判定第二个元素与第一元素的大小,如果第二个小于第一个,则交换位置,这时候第一个和第二个已经排好序,通过第三个元素与前面已经排好的第二个元素进行比较,如果大于第二个,则进行下一轮循环、否则交换位置后继续与第一个元素进行比较,外部控制循环到达直到到达数组末端。这种排序方式有个相对于选择排序有个好处就是如果数组本身就已经有部分排好序,则在后面的比较中当与前面已经排好序的最大值进行比较时如果大于最大值的元素就会忽略掉与其他元素的比较,节省了时间。

private static void meth3() {
        // TODO Auto-generated method stub
        Scanner scr = new Scanner(System.in);
        int[] num = { 2, 5, 7, 1, 4 };
        System.out.println("请输入要查找的内容 ");
        int in = scr.nextInt();

        int dext = spos(num, in);

        if (dext == -1) {
            System.out.println("内容不存在 再见!!");

        } else {
            System.out.println("下标是" + dext);

        }

    }

扫描二维码关注公众号,回复: 6452329 查看本文章

冒泡排序(以递增排序为例):冒泡排序的思想是从左到右(从右到左)进行相邻元素的大小判定,如果后一个元素小于前一个元素,交换位置,一轮循环后最大值将在最右边。

private static void meth1() {
        // TODO Auto-generated method stub
        int[] num = { 2, 5, 7, 1, 4 };
        for (int i = 0; i < num.length - 1; i++) {
            for (int j = 0; j < num.length - 1 - i; j++) {
                if (num[j] < num[j + 1]) {
                    int temp = num[j];
                    num[j] = num[j + 1];
                    num[j + 1] = temp;
                }

            }

        }
        System.out.println(Arrays.toString(num));

    }
 

猜你喜欢

转载自blog.csdn.net/qq_45097560/article/details/91388316