南京理工大学新程序设计数组

第6章 数组与字符串 关键点总结

写在最前,笔者是纯小白,记录于此是为了自己更好的记忆,希望大家多多担待错误啥的 respect!

壹 一维数组

  • 定义:尽量别用变量
  • 初始化:位赋值元素缺省为0
  • 初始化列表:buhui
  • 访问:主流是下标访问,目前就老实用这个就行了
    注意点:
    1.下标访问别越界
    2.数组名别赋值
    3.数组之间别赋值
    4.两数组名别用关系运算符
    5.别整花活,小白平平淡淡才是真
  • 基于范围for循环
    挺好用,就是不知道机考能过不
    基操简单,注意&Y可以改变数组元素,y不能
    其他的buhui,有兴趣自己了解
  • 应用
    1.多项式计算 更高效
    for循环遍历 不严谨例子 图一乐 非重点 理解逻辑即可
double a[2]={1,2};  
y=a[0];
cin>>x;  
for(int i=0;i<2;i++)  
y=y*x+a[i+1];  

2.选择排序 (重点)
最基本
逻辑实现 遍历第一趟数组,找出数组的最小值,与第一个数据交换
下面是按升序重新排列数组

void selectSort2(int data[], int n) {
int i, j, temp;
for(i =0; i <n ﹣1; i++ )                   //两两组合
for(j =i+1; j<n; j++ )
if(data[i] >data[j]){               //检查条件
temp = data[i]                //交换两个元素
data[i]=data[j]
data[j]=temp;
}
}

运用
输入任意十个整数,按降序排序,再输入一个整数插入至上述数列,使数列保持降序。

// 在升序数组中插入元素并保持升序
void insertAndSort(int arr[], int& size, int num) {
    int i = size - 1;

    // 在找到合适位置之前,将大于待插入数的元素向右移动一个位置
    while (i >= 0 && arr[i] > num) {
        arr[i + 1] = arr[i];
        i--;
    }

    // 插入新元素
    arr[i + 1] = num;
    size++; // 更新数组大小
}
  • 在排好序的数列后再引用这个函数就好,前提是原数组大小可以多容纳最少一个数
  1. 冒泡排序(重点)
void bubbleSort (int data[ ], int n){
int i, j, temp;
for (i = 0; i < n -1; i++ )                       //外层循环控制总轮次
for(j = 0; j < n-1-i; j++)                  //内层循环控制比较次数
if(data[j] > data[j +1]){               //是否需要相邻交换
temp =data[j];
data[j] = data[j +1];
data[j +1] = temp;

4.二分查找
要讲二分查找,我们先从顺序查找开始

#include <iostream>

// 顺序查找函数
int linearSearch(int arr[], int size, int target) {
    for (int i = 0; i < size; ++i) {
        if (arr[i] == target) {
            return i; // 返回找到的元素索引
        }
    }
    return -1; // 如果未找到,返回 -1
}

int main() {
    int nums[] = {2, 5, 9, 13, 25, 4, 7}; // 数组
    int size = sizeof(nums) / sizeof(nums[0]); // 数组大小
    int target = 13; // 要查找的目标元素

    int foundIndex = linearSearch(nums, size, target);

    if (foundIndex != -1) {
        std::cout << "Element found at index: " << foundIndex << std::endl;
    } else {
        std::cout << "Element not found in the array." << std::endl;
    }

    return 0;
}

二分查找


int searchBy(int data[], int n, int x)  
int low=0;
int high =n -1;
int binary= (low + high) / 2;                          //确定折半位置
while(x!= data[binary] && low <= high){                 //循环条件控制
if (x < data[binary])
high =binary - 1;                            //在前半区间查找
else
low = binary +1;                            //在后半区间查找
binary = (low + high) / 2;
}
if (low<= high)  
return binary;
else 
return -1;



  • 调用标准算法
  1. sort函数
    std::sort 函数是 C++ 标准库 头文件中提供的排序函数,它使用的是快速排序(Quicksort)或其它有效的排序算法。这个函数非常灵活,并且可以用于各种不同类型的数据和容器。下面详细说明了 std::sort 函数的运用方法和一些重要的注意事项。
#include <iostream>
#include <algorithm>

// 自定义比较函数:按照奇偶性排序
bool compareOddEven(int a, int b) {
    if (a % 2 == 0 && b % 2 == 1) {
        return false; // 偶数在前,奇数在后
    } else if (a % 2 == 1 && b % 2 == 0) {
        return true; // 奇数在前,偶数在后
    } else {
        return a < b; // 同为奇数或同为偶数时按升序排列
    }
}

int main() {
    int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5};
    int size = sizeof(arr) / sizeof(arr[0]);

    // 使用自定义比较函数进行排序
    std::sort(arr, arr + size, compareOddEven);

    std::cout << "Sorted array based on odd-even: ";
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出结果为 1 1 3 5 5 9 2 4 6

  1. find函数
    当使用 std::find 函数查找数组中的特定元素时,可以通过指定数组的起始位置和结束位置来进行查找。以下是一个示例:
#include <iostream>
#include <algorithm>

int main() {
    int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5};
    int target = 5;
    int size = sizeof(arr) / sizeof(arr[0]);

    // 在数组中查找目标值
    auto result = std::find(arr, arr + size, target);

    if (result != arr + size) {
        // 计算目标值的索引
        int index = std::distance(arr, result);
        std::cout << "Element " << target << " found at index: " << index << std::endl;
    } else {
        std::cout << "Element " << target << " not found in the array." << std::endl;
    }

    return 0;
}

std::distance 是 C++ 标准库 头文件中的函数,用于计算两个迭代器之间的距离(元素的个数)。它接受两个迭代器作为参数,并返回它们之间的距离,即元素个数的差值。

  1. generate函数
#include <iostream>
#include <algorithm>
#include <vector>

// 生成器函数:返回随机整数
int generateRandomNumber() {
    return rand() % 100; // 返回 0 到 99 之间的随机整数
}

int main() {
    std::vector<int> vec(10); // 创建一个大小为 10 的 vector

    // 使用 generate 和生成器函数填充 vector
    std::generate(vec.begin(), vec.end(), generateRandomNumber);

    std::cout << "Generated vector: ";
    for (int num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}
  • 还可以这样
void makeRandom(int data[], int n) {
srand(time(NULL) );                           //取当前时间秒数作为随机数发生器种
for (int i = 0; i < n; i++ )
data[i] = rand() % 100;                   //填充100 以内的随机数
}

记得包含头文件ctimecstdlib
太多了,其他的自己找吧,sorry

贰 二维数组

  • 定义:几行几列
  • 初始化:可以不指定行数,但要指定列数,不可超界
  • 应用:难死我了aaaaaaaa!!!!
    核心思想是矩阵,行列变换 ,多找规律
    1.交换行,第m行和n行
for(int i=1;i<=?;i++)
{
  swap(a[m][i]=a[n][i]);
}  
  1. 遍历输入与输出熟练
for(int i=1;i<=?;i++)
for(int j=1;j<=?;j++)
cin>>a[i][j];
  1. 对角线交换
    找出规律,需要记忆
    左上右下,列-行=1;
    右上左下,行+列=定值;
    输出:遍历数组+if语句判定输出!
  2. 计算矩阵边缘元素之和
    输出:遍历数组+if判断第一行,i=n行,第一列,j=m列。sum+=a[i][j]
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值