数组相关面试题

  1. 编写冒泡排序和选择排序
  2. 给一个乱序数组,使得奇数放在前面,偶数放在数组后面,并且保证奇偶数在原数组的相对位置不变

第一题、

//冒泡排序时间复杂度是O(n^2)
public static void bubbleSort(int[] arr) {
        boolean didSwap;
        for (int i = 0, len = arr.length; i < len - 1; i++) {
            didSwap = false;//当给定的数组是排过顺序的,直接退出
            for (int j = 0; j < len - i - 1; j++) {
                //从小到大排序
                if (arr[j + 1] < arr[j]) {
                    int temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                    didSwap = true;
                }
            }
            if (didSwap == false)
                return;
        }
    }

//选择排序时间复杂度是O(n^2)
 public static void selectSort(int[] arr) {
        boolean didSwap;
        for (int i = 0, len = arr.length; i < len; i++) {
            for (int j = i + 1; j < len; j++) {
                if (arr[i] > arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }

        }
    }

第二题:

 public static void arraySort(int[] a) {
        int leng = a.length;
        int i = 0, j;
        while (i < leng) {
            if (a[i] % 2 == 0) {
                i++;
            } else {
                //此时的i指的是奇数
                j = i + 1;
                while (a[j] % 2 == 1) {
                    if (j == leng - 1) {
                        return;
                    }
                    j++;
                }
                //j指的是偶数
                int temp = a[j];
                while (j > i) {
                    a[j] = a[j - 1];
                    j--;
                }
                a[i] = temp;
            }
        }
        System.out.println(Arrays.toString(a));
    }
发布了23 篇原创文章 · 获赞 12 · 访问量 9523

猜你喜欢

转载自blog.csdn.net/geng2568/article/details/105075321