冒泡排序
// 2 5 3 1 8
int arrNum[5] = {2, 5, 4, 1, 8};
//让数组元素由小到大排列 1 2 3 5 8
//两两相互比较(相邻的两个元素),发现不符合要求的排列顺序调整两元素的相互位置。
//25318 第一对
//23518 第二对
//23158
//23158 最后一个元素一定是一个最大的元素 4
//23158
//21358
//21358 倒数第二个元素一定是第二大的元素 3
//12358
//12358 倒数第三个元素一定是第三大的元素 2
//12358 倒数第四个元素一定是第四大的元素 1
//冒泡算法实现 i j
//外层循环执行了 n - 1
for (int i = 0; i < 4; i ++) {
//最大索引号可以到 3 3 + 1
//内层循环执行了 n - i - 1 --> n / 2 - 1
for (int j = 0; j < 4 - i; j ++) {
if (arrNum[j] > arrNum[j + 1]) {
//调整元素位置
// int val = arrNum[j];
// arrNum[j] = arrNum[j + 1];
// arrNum[j + 1] = val;
arrNum[j] ^= arrNum[j + 1];
arrNum[j + 1] ^= arrNum[j];
arrNum[j] ^= arrNum[j + 1];
}
}
}
//算法结束
for (int i = 0; i < 5; i ++) {
printf("----%d-----\n", arrNum[i]);
}
选择排序
//选取一个元素(一般一次选第一个,第二个,第三个。。。第 N - 1 个),依次的和其他元素作比较,不符合条件调整元素位置。
int arrNum2[5] = {4, 8, 9, 2, 1};
//选择排序
//48921 4 8
//48921 4 9
//28941 4 2
//18942 2 1 第一趟 最小值确定在第一个位置
//18942 8 9
//14982 8 4
//12984 4 2 第二趟 第二小的数字确定了,在第二个位置
//12894 9 8
//12498 8 4 第三趟 第三小的数字在第三个位置
//12489 9 8 第四趟 第四小的数字在第四个位置
//外层循环对应的是循环的趟数
for (int i = 0 ; i < 4; i ++) {
//内层循环是将元素两两比较 (不一定是相邻的元素)
for (int j = i; j < 4; j ++) {
if (arrNum2[i] > arrNum2[j + 1]) {
//中间变量 val
int val = arrNum2[i];
arrNum2[i] = arrNum2[j + 1];
arrNum2[j + 1] = val;
}
}
}
for (int i = 0; i < 5; i ++) {
printf("选择排序:%d \n", arrNum2[i]);
}
递归
//斐波那契数列 函数体中调用函数自身
//输入一个 返回相应的值
// 1 1 2 1 3 2
int feb(int index){
//当索引值 为 1 或者 2 返回1
if (index == 1 || index == 2) {
return 1;
}else{
//当索引值为 3.4.5.6.... 返回前两个斐波那契额数列的值的和
return feb(index - 1) + feb(index - 2);
}
}
//递归思想实现阶乘
int fac(int index){
//当索引为1 返回1
if (index == 1) {
return 1;
}else{
//当索引为 2.3.4.5....放回 index *(index-1的阶乘)
return index * fac(index - 1);
}
}
// 2 5 3 1 8
int arrNum[5] = {2, 5, 4, 1, 8};
//让数组元素由小到大排列 1 2 3 5 8
//两两相互比较(相邻的两个元素),发现不符合要求的排列顺序调整两元素的相互位置。
//25318 第一对
//23518 第二对
//23158
//23158 最后一个元素一定是一个最大的元素 4
//23158
//21358
//21358 倒数第二个元素一定是第二大的元素 3
//12358
//12358 倒数第三个元素一定是第三大的元素 2
//12358 倒数第四个元素一定是第四大的元素 1
//冒泡算法实现 i j
//外层循环执行了 n - 1
for (int i = 0; i < 4; i ++) {
//最大索引号可以到 3 3 + 1
//内层循环执行了 n - i - 1 --> n / 2 - 1
for (int j = 0; j < 4 - i; j ++) {
if (arrNum[j] > arrNum[j + 1]) {
//调整元素位置
// int val = arrNum[j];
// arrNum[j] = arrNum[j + 1];
// arrNum[j + 1] = val;
arrNum[j] ^= arrNum[j + 1];
arrNum[j + 1] ^= arrNum[j];
arrNum[j] ^= arrNum[j + 1];
}
}
}
//算法结束
for (int i = 0; i < 5; i ++) {
printf("----%d-----\n", arrNum[i]);
}
选择排序
//选取一个元素(一般一次选第一个,第二个,第三个。。。第 N - 1 个),依次的和其他元素作比较,不符合条件调整元素位置。
int arrNum2[5] = {4, 8, 9, 2, 1};
//选择排序
//48921 4 8
//48921 4 9
//28941 4 2
//18942 2 1 第一趟 最小值确定在第一个位置
//18942 8 9
//14982 8 4
//12984 4 2 第二趟 第二小的数字确定了,在第二个位置
//12894 9 8
//12498 8 4 第三趟 第三小的数字在第三个位置
//12489 9 8 第四趟 第四小的数字在第四个位置
//外层循环对应的是循环的趟数
for (int i = 0 ; i < 4; i ++) {
//内层循环是将元素两两比较 (不一定是相邻的元素)
for (int j = i; j < 4; j ++) {
if (arrNum2[i] > arrNum2[j + 1]) {
//中间变量 val
int val = arrNum2[i];
arrNum2[i] = arrNum2[j + 1];
arrNum2[j + 1] = val;
}
}
}
for (int i = 0; i < 5; i ++) {
printf("选择排序:%d \n", arrNum2[i]);
}
递归
//斐波那契数列 函数体中调用函数自身
//输入一个 返回相应的值
// 1 1 2 1 3 2
int feb(int index){
//当索引值 为 1 或者 2 返回1
if (index == 1 || index == 2) {
return 1;
}else{
//当索引值为 3.4.5.6.... 返回前两个斐波那契额数列的值的和
return feb(index - 1) + feb(index - 2);
}
}
//递归思想实现阶乘
int fac(int index){
//当索引为1 返回1
if (index == 1) {
return 1;
}else{
//当索引为 2.3.4.5....放回 index *(index-1的阶乘)
return index * fac(index - 1);
}
}