首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 使用指標交換排序三個整數:正確解引用與交換邏輯

     編輯:程式設計疑難解答

原始錯誤代碼

void sort(int *x, int *y, int *z) {
    if (x > y) change(x, y); // 比較指標位址而非值
    ...
}
void change(int *i, int *j) {
    int *f = i; i = j; j = f; // 僅交換區域指標,不影響原變數
}

修正版

void sort(int *x, int *y, int *z) {
    if (*x > *y) change(x, y); // 解引用比較值
    if (*y > *z) change(y, z);
    if (*x > *y) change(x, y); // 再次確保 x <= y
}
void change(int *i, int *j) {
    int tmp = *i; *i = *j; *j = tmp; // 交換所指向的值
}

關鍵點

  1. 比較大小必須 解引用(*x > *y)。
  2. 交換函數需對 所指記憶體內容 操作(*i = *j)。
  3. 排序網路(三數排序)需三次比較交換確保有序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved