第一部分:数组基础操作强化
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) 数据范围明确