基本思想:對無序序列進行 n-1 輪選擇,第 i 輪找出最小元素並與第 i 位置交換,實現「各回各家」。
#include <stdio.h>
void SelectSort(int *Array, int n) {
int i, j, min_idx, temp;
for (i = 0; i < n - 1; i++) {
min_idx = i;
for (j = i + 1; j < n; j++) {
if (*(Array + j) < *(Array + min_idx))
min_idx = j;
}
if (min_idx != i) {
temp = *(Array + min_idx);
*(Array + min_idx) = *(Array + i);
*(Array + i) = temp;
}
}
}
int main() {
int Array[10] = {12, 2, 37, 67, 90, 1, 78, 67, 2, 32};
printf("待排序數組:");
for (int i = 0; i < 10; i++) printf("%d ", *(Array + i));
SelectSort(Array, 10);
printf("\n排序後:");
for (int i = 0; i < 10; i++) printf("%d ", *(Array + i));
printf("\n");
return 0;
}
前提:陣列已排序。利用指標偏移快速定位中間元素,逐步縮小搜尋範圍。
#include <stdio.h>
int BinarySearch(int *Array, int n, int x) {
int low = 0, high = n - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (*(Array + mid) == x) return 1;
else if (*(Array + mid) > x) high = mid - 1;
else low = mid + 1;
}
return 0;
}
int main() {
int Array[10] = {2, 4, 5, 13, 15, 20, 30, 35, 40, 50};
int x1 = 20, x2 = 33;
printf(BinarySearch(Array, 10, x1) ? "已找到 %d\n" : "未找到 %d\n", x1);
printf(BinarySearch(Array, 10, x2) ? "已找到 %d\n" : "未找到 %d\n", x2);
return 0;
}
const int *ptr。