1. 程式人生 > >一個簡單的雙向鏈表

一個簡單的雙向鏈表

大於 ron esp temp include ace uic mes family

參考:

http://www.cnblogs.com/skywang12345/p/3596746.html

下面上代碼:

#include<iostream>
using namespace std;
void quicksort(int *arr, int left, int right)
{
    if(left < right)
    {
        int i = left;
        int j = right;
        int temp = arr[i];
        while(i < j)
        {
            
while(i < j && arr[j] > temp) { j--; } if(i < j) { arr[i] = arr[j];// arr[i++] = arr[j]; i++; } while(i < j && arr[i] < temp) { i
++; } if(i < j) { arr[j] = arr[i]; // arr[j--] = arr[i]; j--; } } arr[i] = temp; quicksort(arr, left, i-1); quicksort(arr, i+1, right); } } int main() { int arr[] = {30, 20, 40, 20, 10
, 40, 60, 50,90,70, 70}; int count = sizeof(arr)/sizeof(int); cout << "Before:" << endl; for(int i = 0; i < count; i++) { cout << arr[i] << " "; } cout << endl; quicksort(arr, 0, count - 1); cout << "After:" << endl; for(int i = 0; i < count; i++) { cout << arr[i] << " "; } cout << endl; }

分析:

以數組int arr[] = {4, 5, 2 ,6, 1, 3};進行分析:
初始化 i=0j=5 temp = arr[0];
紅色加粗的表示在下一次將會被覆蓋的位置。


循環次數

退出while條件

當前數組

對應的操作

1

i=0,j=5 <-

3 < temp

3 5 2 6 1 3

arr[0]=arr[5], i++ (arr[i++]=arr[j])

2

i=1,j =5 ->

5 > temp

3 5 2 6 1 5

arr[5]=arr[1],j-- (arr[j--]=arr)

3

i=1,j=4 <-

1 < temp

3 1 2 6 1 5

arr[1]=arr[4], i++ (arr[i++]=arr[j])

4

i=2,j=4 ->

3 1 2 6 1 5

i++ (因為2小於temp,直接i++)

5

i=3,j=4, ->

6 > temp

3 1 2 6 6 5

arr[4]=arr[3]; j-- (arr[j--]=arr)

6

i=3,j=3

3 1 2 4 6 5

arr[3] = temp


第一次循環之後數組變成了這樣 3 1 2 4 6 5I,j的值都是3
arr[3]左邊的全部小於arr[3]arr[3]右邊的全部大於arr[3]
然後對兩邊分別進行排序;
quicksort(arr, 0, 2);
quicksort(arr, 4, 5);

一個簡單的雙向鏈表