算法學習之路,排序之快速排序(Java實現)

今天忽然想寫個排序,之前寫過,而後寫了以後一直出錯,而後本身百度了一下,看了別人寫的方法,本身也嘗試着寫了一個。接下來我來講明快速排序的思路以及實現的代碼。數組

快速排序思路:首先是定義一個變量key,把數組的第一個元素的值賦給key,而後定義兩個變量start,end指向數組的第一個元素和最後一個元素。而後從後往前遍歷,一直end--,知道下標爲end的值小於key,就交換下標爲start,end的值,而後再從前遍歷,一直start++,直到下標爲start的值大於key,就交換下標爲start,end的值。這樣,通過一次排序以後,小於key的出如今key的左邊,大於key的出如今key的右邊。而後再用遞歸對key的左右兩邊進行上述方法進行排序。ui

![圖片描述快速排序spa

代碼:指針

//判斷數組是否爲空,數組元素是否爲0
if (data.length < 1 || data == null) {
    return;
}

//頭指針小於尾指針,則返回
if (start >= end) {
    return;
}

//數組不爲空且元素個數大於0
boolean flag = true;
int low = start;
int high = end;
int key = data[low];
while (low < high) {
    //flag用來判斷是否從下標爲high的值與基準進行比較
    if (flag) {
        if (data[high] < key) {
            swmp(data, low, high);
            flag = false;
        } else {
            high--;
        }
    } else {
        //判斷下標爲low的值是否與基準進行比較。
        if (data[low] > key) {
            swmp(data, low, high);
            flag = true;
        } else {
            low++;
        }
    }
}
soft_quick(data, start, low - 1);
soft_quick(data, high + 1, end);


int temp = data[start];
data[start] = data[end];
data[end] = temp;



for (int index : data) {
    System.out.print(index + "\t");
}
System.out.println();

最後是運行結果:
圖片描述code

相關文章
相關標籤/搜索