7 10 指標版本的快速排序

2021-10-22 03:11:49 字數 2232 閱讀 5468

1. 另一種快排的方式,注意樞軸元素的值是拿出來比較的,最後一刻才會確定樞軸元素所在的位置,值和位置需要注意區分

}// 不用指標的快排,不過是中間樞軸法

int partitionnormal(int low, int high, int array)

swapint(array+i, array+j);

} return i;

}void quicksortnormal(int low, int high, int array)

#define player_count 20

int main()

for (int i = 0; i < player_count; ++i)

shuffle(players, player_count);

printf("排序前:");

for (int i = 0; i < player_count; ++i)

quicksortnormal(0, 19, players);

printf("\n排序後:");

for (int i = 0; i < player_count; ++i)

return 0;

}對了,shuffle 那邊有些變化,原先傳進去的引數是 int array,現在變成了 int *array,其實兩者是一樣的:

2. 指標版本的快排,把陣列思想放棄,陣列思想轉變為乙個記憶體指標的思想,陣列的元素的下標和取值就是指標變數的各種運算,不再是對陣列元素進行排序,而是對乙個記憶體塊進行排序

#include #include #include void swapint(int *a, int *b)

void shuffle(int array, int length)

}int *partitionpointer(int *low, int *high)

if(*j > pivot)

swapint(i, j);

} return i;

}void quicksortpointer(int *low, int *high)

#define player_count 20

int main()

for (int i = 0; i < player_count; ++i)

shuffle(players, player_count);

printf("排序前:");

for (int i = 0; i < player_count; ++i)

quicksortpointer(players, players+player_count-1);

printf("\n排序後:");

for (int i = 0; i < player_count; ++i)

return 0;

}

最後附上老師的**:

int *partition(int *low, int *high) 

return q;

}void quicksort(int *low, int *high)

提問:

1. 為什麼 (low + high)/2 沒有 low + (high-low)/2 好,為什麼後者可以防止溢位?

想象一下,如果下標是 98 億 和 99億 ,對比計算一下。其實後者並不是絕對防止溢位,而是擴充套件性更好,把大數計算轉變為了小數計算,前者太依賴計算機的精度。

4 2指標的引入

1.建議避免使用指標和陣列.2.指標的定義和初始化 string ps 3.連續宣告多個指標容易導致混淆 string ps1,ps2 4.避免使用未初始化的指標 如果必須分開指標和他所指的物件,可以將指標初始化為0 還可以使用null int pi null null不是在命名空間std中定義的 ...

6 1 指標的概念

為了說清楚什麼是指標,必須弄清楚資料在記憶體中是如何儲存的,又是如何讀取的。如果在程式中定義了乙個變數,在編譯時就給這個變數分配記憶體單元。系統根據程式中定義的變數型別,分配一定長度的空間。例如,c 編譯系統一般為整型變數分配4個位元組,為單精度浮點型變數分配4個位元組,為字元型變數分配1個位元組。...

15 指標的運算

1.比較運算 指標變數可以進行的比較運算包括 等。兩個指標變數 p 和 q,若 p q 說明這兩個指標變數指向同乙個變數。2.運算 運算是指標變數特有的運算,通過這個運算可得到指標變數中被指變數的值。3.減法運算 假設用兩個指標變數指向同乙個陣列中的不同元素,因為陣列中的元素在記憶體中存放的空間是連...