怎么当网站站长,aspsqlserver做网站,有哪些做电子小报的网站,体育直播网站制作开发不管风吹浪打#xff0c;胜似闲庭信步#xff01; 1.选择排序#xff1a;
不管风吹浪打#xff0c;胜似闲庭信步#xff01;1.选择排序#xff1a;
// 这个宏定义用于忽略 Visual Studio 中一些安全相关的警告#xff0c;使得可以使用像 scanf 这样的函数而不产生警告…不管风吹浪打胜似闲庭信步 1.选择排序
不管风吹浪打胜似闲庭信步1.选择排序
// 这个宏定义用于忽略 Visual Studio 中一些安全相关的警告使得可以使用像 scanf 这样的函数而不产生警告
#define _CRT_SECURE_NO_WARNINGS
// 包含标准输入输出库这样就可以使用 scanf 和 printf 等函数
#include stdio.h
// 定义一个常量 N其值为 6表示数组的大小
#define N 6// 主函数程序的入口点
int main() {// 定义变量// i 和 j 用于循环计数// min 用于记录当前最小值的下标// t 用于交换元素时的临时存储// a[N] 是一个包含 N 个整数的数组int i, min, t, a[N], j;// 第一个 for 循环用于输入数组元素for (i 0; i N; i) {// 使用 scanf 函数从标准输入读取一个整数并将其存储到数组 a 的第 i 个位置scanf(%d, a[i]);}// 选择排序的外层循环控制排序的轮数需要进行 N - 1 轮for (i 0; i N - 1; i) {// 内层循环用于比较当前元素和其后的所有元素for (j i 1; j N; j) {// 假设当前未排序部分的第一个元素下标为 i是最小值min i;// 如果发现后面的元素下标为 j比当前假设的最小值小if (a[min] a[j]) {// 更新最小值的下标为 jmin j;}// 如果最小值的下标不是 i说明找到了比 a[i] 更小的元素if (min ! i) {// 使用临时变量 t 交换 a[i] 和 a[min] 的值t a[i];a[i] a[min];a[min] t;}}}// 第三个 for 循环用于输出排序后的数组元素for (i 0; i N; i) {// 使用 printf 函数将数组 a 的第 i 个元素输出到标准输出并在后面加上一个空格printf(%d , a[i]);}// 程序正常结束返回 0 表示成功return 0;
}解释
选择排序的核心就是每一轮都从剩下的卡片中找出数字最小的那张然后和当前轮次最前面的卡片交换位置。
第一轮i 0• 假设最小数字卡片刚开始你站在这沓卡片的最前面先假设当前看到的第一张卡片也就是 a[0]数字是 5是这一沓卡片里数字最小的把这张卡片的位置记为 min 0。
• 寻找真正最小数字卡片然后你从第二张卡片a[1]开始往后看和你假设的最小数字卡片比较
o 看到第二张卡片数字是 3比你假设的 5 小那你就更新认为第二张卡片才是最小的把最小卡片的位置更新为 min 1。
o 接着看第三张卡片数字是 4比 3 大最小卡片位置还是 min 1 不变。
o 再看第四张卡片数字是 1比 3 小更新最小卡片位置为 min 3。
o 第五张卡片数字是 2比 1 大最小卡片位置还是 min 3。
o 第六张卡片数字是 6比 1 大最小卡片位置依旧是 min 3。
• 交换卡片位置经过一轮比较发现最小数字卡片其实是第四张位置 min 3和你最开始假设的第一张位置 i 0不一样那就把第一张和第四张卡片交换位置。交换后这沓卡片顺序变成了 [1, 3, 4, 5, 2, 6]。2. 有一个已排好序的数组要求输入一个数后按原来排序的规律将它插入数组中// 该宏定义用于在使用 Visual Studio 等编译器时忽略与安全相关的警告。
// 例如允许使用像 scanf 这样可能存在安全风险的函数而不产生编译警告。
#define _CRT_SECURE_NO_WARNINGS
// 引入标准输入输出库使得程序可以使用如 scanf 和 printf 等标准输入输出函数。
#include stdio.h
// 定义一个常量 N 其值为 5 这里 N 代表要输入的初始有序数组的元素数量。
#define N 5// 主函数程序的入口点程序从这里开始执行。
int main() {// 声明变量 i 用于循环计数控制数组元素的访问和操作。// 声明变量 k 用于存储用户额外输入的一个整数后续会将其插入到数组中。// 声明一个包含 N 1 个整数的数组 a 多出来的一个位置是为了插入额外输入的整数 k 。int i, k, a[N 1];// 此 for 循环用于输入初始的有序数组元素。// 循环从 i 等于 0 开始每次循环 i 增加 1 直到 i 小于 N 不成立为止。// 在每次循环中使用 scanf 函数从标准输入通常是键盘读取一个整数// 并将其存储到数组 a 的第 i 个位置。for (i 0; i N; i) {scanf(%d, a[i]);}// 使用 scanf 函数从标准输入读取一个额外的整数并将其存储到变量 k 中。scanf(%d, k);// 从数组的最后一个元素开始向前遍历目的是找到合适的位置插入整数 k 。// 循环从 i 等于 N - 1 开始因为数组下标从 0 开始所以最后一个元素下标是 N - 1 // 每次循环 i 减 1 直到 i 小于 0 不成立为止。for (i N - 1; i 0; i--) {// 如果变量 k 的值小于数组 a 中第 i 个元素的值。if (k a[i]) {// 将数组 a 中第 i 个元素的值赋给第 i 1 个位置即把元素向后移动一位为插入 k 腾出空间。a[i 1] a[i];}else {// 如果 k 不小于当前元素 a[i] 说明已经找到了插入 k 的合适位置跳出循环。break;}}// 循环结束后i 1 就是找到的插入位置将变量 k 的值赋给数组 a 的第 i 1 个位置。a[i 1] k;// 此 for 循环用于输出插入 k 后的数组元素。// 循环从 i 等于 0 开始每次循环 i 增加 1 直到 i 小于 N 1 不成立为止。// 在每次循环中使用 printf 函数将数组 a 的第 i 个元素输出到标准输出通常是屏幕// 并在元素后面输出一个空格用于分隔不同的元素。for (i 0; i N 1; i) {printf(%d , a[i]);}// 主函数返回 0 表示程序正常结束。在 C 语言中返回 0 通常表示程序执行成功。return 0;
}3.二维数组 解释 选择排序的核心就是每一轮都从剩下的卡片中找出数字最小的那张然后和当前轮次最前面的卡片交换位置。
第一轮i 0 假设最小数字卡片刚开始你站在这沓卡片的最前面先假设当前看到的第一张卡片也就是 a[0]数字是 5是这一沓卡片里数字最小的把这张卡片的位置记为 min 0。寻找真正最小数字卡片然后你从第二张卡片a[1]开始往后看和你假设的最小数字卡片比较 看到第二张卡片数字是 3比你假设的 5 小那你就更新认为第二张卡片才是最小的把最小卡片的位置更新为 min 1。接着看第三张卡片数字是 4比 3 大最小卡片位置还是 min 1 不变。再看第四张卡片数字是 1比 3 小更新最小卡片位置为 min 3。第五张卡片数字是 2比 1 大最小卡片位置还是 min 3。第六张卡片数字是 6比 1 大最小卡片位置依旧是 min 3。 交换卡片位置经过一轮比较发现最小数字卡片其实是第四张位置 min 3和你最开始假设的第一张位置 i 0不一样那就把第一张和第四张卡片交换位置。交换后这沓卡片顺序变成了 [1, 3, 4, 5, 2, 6]。 2. 有一个已排好序的数组要求输入一个数后按原来排序的规律将它插入数组中
// 该宏定义用于在使用 Visual Studio 等编译器时忽略与安全相关的警告。// 例如允许使用像 scanf 这样可能存在安全风险的函数而不产生编译警告。#define _CRT_SECURE_NO_WARNINGS// 引入标准输入输出库使得程序可以使用如 scanf 和 printf 等标准输入输出函数。#include stdio.h// 定义一个常量 N 其值为 5 这里 N 代表要输入的初始有序数组的元素数量。#define N 5// 主函数程序的入口点程序从这里开始执行。int main() {// 声明变量 i 用于循环计数控制数组元素的访问和操作。// 声明变量 k 用于存储用户额外输入的一个整数后续会将其插入到数组中。// 声明一个包含 N 1 个整数的数组 a 多出来的一个位置是为了插入额外输入的整数 k 。int i, k, a[N 1];// 此 for 循环用于输入初始的有序数组元素。// 循环从 i 等于 0 开始每次循环 i 增加 1 直到 i 小于 N 不成立为止。// 在每次循环中使用 scanf 函数从标准输入通常是键盘读取一个整数// 并将其存储到数组 a 的第 i 个位置。for (i 0; i N; i) {scanf(%d, a[i]);}// 使用 scanf 函数从标准输入读取一个额外的整数并将其存储到变量 k 中。scanf(%d, k);// 从数组的最后一个元素开始向前遍历目的是找到合适的位置插入整数 k 。// 循环从 i 等于 N - 1 开始因为数组下标从 0 开始所以最后一个元素下标是 N - 1 // 每次循环 i 减 1 直到 i 小于 0 不成立为止。for (i N - 1; i 0; i--) {// 如果变量 k 的值小于数组 a 中第 i 个元素的值。if (k a[i]) {// 将数组 a 中第 i 个元素的值赋给第 i 1 个位置即把元素向后移动一位为插入 k 腾出空间。a[i 1] a[i];}else {// 如果 k 不小于当前元素 a[i] 说明已经找到了插入 k 的合适位置跳出循环。break;}}// 循环结束后i 1 就是找到的插入位置将变量 k 的值赋给数组 a 的第 i 1 个位置。a[i 1] k;// 此 for 循环用于输出插入 k 后的数组元素。// 循环从 i 等于 0 开始每次循环 i 增加 1 直到 i 小于 N 1 不成立为止。// 在每次循环中使用 printf 函数将数组 a 的第 i 个元素输出到标准输出通常是屏幕// 并在元素后面输出一个空格用于分隔不同的元素。for (i 0; i N 1; i) {printf(%d , a[i]);}// 主函数返回 0 表示程序正常结束。在 C 语言中返回 0 通常表示程序执行成功。return 0;} 3.二维数组