首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 指標編程筆記:選擇排序與二分查找的指標實現

     編輯:關於C語言

直接選擇排序(Selection Sort)

基本思想:對無序序列進行 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;
}

指標運算優勢

  • *(Array + i) 等價於 Array[i],但更直觀表達記憶體偏移;
  • 避免陣列下標轉換開銷,適合嵌入式與高性能場景;
  • 配合 const 修飾可防止誤修改:const int *ptr。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved