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

C語言指針排序:查找最大值及其位置 (修正邏輯錯誤)

     編輯:程式設計疑難解答

原代碼問題

  • 冒泡排序邏輯錯誤:單層循環無法完成排序,且交換條件反了 (升序 vs 降序)。
  • 指針運算 `*(p+i)` 正確,但排序後最大值不一定在 `p+n-1` (若升序)。
  • 位置輸出邏輯混亂。

簡化:直接遍歷找最大值


#include 
#define N 1000

int main() {
    int a[N], n, i;
    int *p = a;
    scanf("%d", &n);
    for (i=0; i *(p+maxIdx)) maxIdx = i;
    }
    printf("max=%d\n", *(p+maxIdx));
    printf("location=%d\n", maxIdx+1); // 1-based
    return 0;
}

若必須排序

使用標準庫 `qsort` 或正確實現冒泡/選擇排序 (雙層循環)。但題目僅需最大值及位置,**遍歷 O(n) 最優**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved