Programming: Sort

发布时间 2023-06-04 01:00:38作者: ascertain

 

JavaScript

let arr = [8, 4, 3, 2, 6, 7, 1, 5, 9]

function quickSort(arr) {
    console.log(arr)
    if(arr.length <= 1)
        return arr
    let midIndex = parseInt(arr.length / 2)
    let midValue = arr.splice(midIndex, 1)[0]
    let left = [], right = []
    for(let v of arr) {
        if(v < midValue)
            left.push(v)
        else
            right.unshift(v)
    }
    return quickSort(left).concat(midValue, quickSort(right))
}

console.log(quickSort(arr))

 

Java:

Ovonic Bubble Sort

public class D {
    public static void main(String[] args) {
        int[] arr = {8, 4, 3, 7, 5, 1, 6, 9, 2};

        int iterCount = 0, swapCount = 0, lowCursor = 0, highCursor = arr.length - 1;
        boolean flag;

        while (lowCursor < highCursor) {
            flag = false;
            for (int i = lowCursor; i < highCursor; ++i) {
                iterCount++;
                if (arr[i] > arr[i + 1]) {
                    swapCount++;
                    flag = true;
                    arr[i] = arr[i] ^ arr[i + 1];
                    arr[i + 1] = arr[i] ^ arr[i + 1];
                    arr[i] = arr[i] ^ arr[i + 1];
                }
            }
            highCursor--;
            for (int i = highCursor; i > lowCursor; --i) {
                iterCount++;
                if (arr[i - 1] > arr[i]) {
                    swapCount++;
                    flag = true;
                    arr[i] = arr[i] + arr[i - 1];
                    arr[i - 1] = arr[i] - arr[i - 1];
                    arr[i] = arr[i] - arr[i - 1];
                }
            }
            lowCursor++;
            if (!flag) break;
        }

        for (int i = 0; i < arr.length; ++i)
            System.out.print(arr[i] + "\t");
        System.out.println();
        System.out.printf("iterCount: %d\n", iterCount);
        System.out.printf("swapCount: %d\n", swapCount);
    }
}

Ovonic bubble sort 略优于one-way bubble sort, swap一样, iter次数少一些