第一次作业:冒泡算法、字符串排序、有序数组拼接、二维数组查数

it2023-09-15  70

第一次作业

题目1. 冒泡算法的初次实现:随机生成10个数并使用冒泡算法按降序排列 源代码:

#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { srand((unsigned int)time(NULL)); int nums[10]; int i,j; int temp; for(i = 0; i < 10; ++i) { nums[i] = (rand() % 50); printf("%-4d",nums[i]); } printf("\n"); printf("letter:\n"); for(j = 10; j > 0; --j) { for(i = 1; i < 10; ++i) { if(nums[i] > nums[i-1]) { temp = nums[i]; nums[i] = nums[i-1]; nums[i-1] = temp; } } } for(i = 0; i < 10; ++i) { printf("%-4d",nums[i]); } printf("\n"); return 0; }

运行结果如下:

题目2. 对冒泡算法的优化 冒泡算法部分代码如下:

int flag = 0; for(j = 10; j > 0; --j) { for(i = 1; i < j; ++i) { int flag = 0; if(nums[i] > nums[i-1]) { temp = nums[i]; nums[i] = nums[i-1]; nums[i-1] = temp; flag = 1; } } if(flag == 1) { break; } } 优化部分: 1.添加判断的标志flag 2.使用++i、++j 3.内层循环i<j

题目3. 对char *str[5] = {“hello”,“world”,“aaa”,“aoho”,“student”};排序

#include<stdio.h> #include<string.h> int main() { char *str[5] = {"hello","world","aaa","aoho","student"}; char *temp = NULL; int i,j; int flag = 0; for(i = 5; i > 0; --i) { for(j = 1; j < i; ++j) { flag = 0; if((strcmp(str[j],str[j-1])) > 1) { temp = str[j]; str[j] = str[j-1]; str[j-1] = temp; flag = 1; } } if(flag == 0) { break; } } for(i = 0; i < 5; ++i) { printf("%-8s",str[i]); } printf("\n"); return 0; }

题目4. 拼接两个有序数组并有序输出

#include<stdio.h> void merge(int *nums1, int m, int *nums2, int n) { int i, j; i = m - 1; j = n - 1; while(i >= 0 && j >= 0) { if(nums1[i] < nums2[j]) { nums1[i+j+1] = nums2[j]; j--; } else { nums1[i+j+1] = nums1[i]; i--; } } while(j >= 0) { nums1[j+1] = nums2[j]; j--; } while(i >= 0) { nums1[i+1] = nums2[i]; i--; } for(i = 0; i < m + n; ++i) { printf("%-3d",nums1[i]); } printf("\n"); } int main() { int nums1[6] = {1,5,9,0,0,0}; int nums2[3] = {2,4,6}; int m = 3; int n = 3; merge(&nums1[0],3,&nums2[0],3); }

题目5. 在二维数组中寻找目标数字并返回结果

#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 100 int main() { srand((unsigned int)time(NULL)); int nums[N]; int count_max = 0; int num; int count = 0; int i, j; for(i = 0; i < 100; ++i) { nums[i] = rand()%51+50; } int count_num[51] = {0}; int temp = 0; for(i =0; i < 100; ++i) { temp = nums[i] - 50; count_num[temp]++; } int num_max = 0; for(i = 0; i < 51; ++i) { if(count_max < count_num[i]) { count_max = count_num[i]; num_max = i + 50; } } printf("%d:%d\n",num_max,count_max); return 0; }
最新回复(0)