C++数组综合训练:插入删除/进制转换/排序算法
第一部分:数组基础操作强化
1.1 数组元素插入(动态位移版)
// 示例:在指定位置插入元素 int a[11], i, n, x, y; cin >> n; // 当前元素数量 for(i = 0; i < n; i++) cin >> a[i]; cin >> x >> y; // 输入插入位置(从1开始计数)和元素值 x--; // 转换为数组下标 // 关键算法:从后向前移动元素(时间复杂度O(n)) for(i = n; i >= x; i--) { a[i + 1] = a[i]; // 元素后移 } a[x] = y; // 插入新元素 n++; // 更新元素数量 // 输出结果 for(i = 0; i < n; i++) { cout << a[i] << " "; }
1.2 数组元素删除(覆盖法)
// 示例:删除指定元素所有出现 int a[11], n, x; cin >> n; for(int i = 0; i < n; i++) cin >> a[i]; cin >> x; // 要删除的元素值 // 双指针法实现删除(时间复杂度O(n)) int j = 0; // 新数组指针 for(int i = 0; i < n; i++) { if(a[i] != x) { a[j++] = a[i]; // 保留非删除元素 } } n = j; // 更新元素数量 // 输出结果 for(int i = 0; i < n; i++) { cout << a[i] << " "; }
第二部分:进制转换
2.1 十进制转任意进制(2-9进制)
void convertBase(int num, int base) {//num代表十进制,base代表转换的进制 int digits[32], i = 0; // 短除法转换核心算法 while(num > 0) { digits[i++] = num % base; num /= base; } // 逆向输出余数 for(int j = i-1; j >= 0; j--) { cout << digits[j]; } }
2.2 二进制转十六进制
string binaryToHex(string binary) { // 补齐4位倍数长度 while(binary.length() % 4 != 0) { binary = "0" + binary; } string hex; const char hexDigits[] = "0123456789ABCDEF"; // 四位一组转换 for(int i=0; i<binary.length(); i+=4) { int val = 0; for(int j=0; j<4; j++) { val = val*2 + (binary[i+j]-'0'); } hex += hexDigits[val]; } return hex; }
第三部分:排序算法精讲
3.1 冒泡排序(优化版)
void bubbleSort(int arr[], int n) { bool swapped; for(int i=0; i<n-1; i++) { swapped = false; for(int j=0; j<n-i-1; j++) { if(arr[j] > arr[j+1]) { // 相邻元素比较 swap(arr[j], arr[j+1]); swapped = true; } } if(!swapped) break; // 提前终止优化 } }
3.2 桶排序(去重排序版)
void bucketSort() { int n, num, count = 0; int buckets[10001] = {0}; cin >> n; for(int i=0; i<n; i++) { cin >> num; if(buckets[num] == 0) { // 去重判断 count++; buckets[num] = 1; // 标记存在 } } cout << "Unique elements: " << count << endl; for(int i=0; i<10001; i++) { if(buckets[i] == 1) { cout << i << " "; } } }
第四部分:知识要点总结
-
数组操作核心:
-
插入/删除的时间复杂度均为O(n)
-
必须预留足够空间
-
注意边界条件处理
-
-
进制转换本质:
-
基于短除法的余数收集
-
注意不同进制的字符表示
-
处理补位和对齐问题
-
-
排序算法特性:
算法 时间复杂度 空间复杂度 适用场景 冒泡排序 O(n²) O(1) 教学演示/小数据量 桶排序 O(n+k) O(k) 数据范围明确