Sort Integers

题目:

Given an integer array, sort it in ascending order. Use selection sort, bubble sort, insertion sort or any O(n2) algorithm.

分析:

感觉这几乎是n^2解法的3种不同的描述方式...

解法:selection sort 就是标准的枚举方法,每次从i+1到end中找到最小元素,并且和i交换

public class Solution {
    public void sortIntegers(int[] A) {
        for (int i = 0; i < A.length; i++) {
            int minIndex = i;
            for (int j = i + 1; j < A.length; j++) {
                if (A[j] < A[minIndex]) {
                    minIndex = j;
                }
            }
            int temp = A[i];
            A[i] = A[minIndex];
            A[minIndex] = temp;
        }
    }
}

解法:bubble sort 就是相邻的元素,如果A[i-1] > A[i]就两两互换,这样最大的会换到最后一位。一直到整一遍没有发生互换才跳出。这个解法还可以优化,因为每走一遍,最后一位的元素就固定了。每一遍都可以比上一遍少走一个元素,虽然还是O(n^2),但是略微快一点

public class Solution {
    public void sortIntegers(int[] A) {
        boolean isSorted = false; //(第一个优化)
        int n = 0; //(第二个优化)
        while (!isSorted) {
            isSorted = true;
            for (int i = 1; i < A.length - n; i++) {
                if (A[i - 1] > A[i]) {
                    isSorted = false;
                    int temp = A[i - 1];
                    A[i - 1] = A[i];
                    A[i] = temp;
                }
            }
            n++;
        }
    }
}

解法:insertion sort 就是通过选出来一个element,插到他应该在的位置,维持前i个有序

public class Solution {
    public void sortIntegers(int[] A) {
        for (int i = 1; i < A.length; i++) {
            int j = i;
            while (j > 0 && A[j - 1] > A[j]) {
                int temp = A[j - 1];
                A[j - 1] = A[j];
                A[j] = temp;
                j--;
            }
        }
    }
}

results matching ""

    No results matching ""