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.減法運算 假設用兩個指標變數指向同乙個陣列中的不同元素,因為陣列中的元素在記憶體中存放的空間是連...