南宁好的网站建设公司,做网站设计能赚钱吗,qq手机网页版在线登录,wordpress 开启侧边栏目录 MT1401归并排序 MT1402堆排序 MT1403后3位排序 MT1404小大大小排序 MT1405小大大小排序II MT1406数字重排 MT1407插入 MT1408插入 MT1409旋转数组 MT1410逆时针旋转数组 MT1401归并排序 c 语言实现代码
#include stdio.h// merge two subarrays
void merge(int a…目录 MT1401·归并排序 MT1402·堆排序 MT1403·后3位排序 MT1404·小大大小排序 MT1405·小大大小排序II MT1406·数字重排 MT1407·插入 MT1408·插入 MT1409·旋转数组 MT1410·逆时针旋转数组 MT1401·归并排序 c 语言实现代码
#include stdio.h// merge two subarrays
void merge(int arr[], int left, int mid, int right) {int i, j, k;int n1 mid - left 1; // left sonArrayint n2 right - mid; // right sonArray// create new arrayint L[n1], R[n2];for (i 0; i n1; i) {L[i] arr[left i];}for (j 0; j n2; j) {R[j] arr[mid 1 j];}i 0;j 0;k left;while (i n1 j n2) {if (L[i] R[j]) {arr[k] L[i];i;} else {arr[k] R[j];j;}k;}while (i n1) {arr[k] L[i];i;k;}while (j n2) {arr[k] R[j];j;k;}
}void mergeSort(int arr[], int left, int right) {if (left right) {int mid left (right - left) / 2;mergeSort(arr, left, mid);mergeSort(arr, mid 1, right);merge(arr, left, mid, right);}
}int main() {int arr[10];for (int i 0; i 10; i) {scanf(%d, arr[i]);}mergeSort(arr, 0, 10 - 1);for (int i 0; i 10; i) {printf(%d , arr[i]);}return 0;
}
MT1402·堆排序 c 语言实现代码
#include stdio.h// swap two element vlaue
void swap(int *a, int *b) {int temp *a;*a *b;*b temp;
}void heapify(int arr[], int n, int i) {int largest i; // root 节点int left 2 * i 1; // 左子节点int right 2 * i 2; // 右子节点if (left n arr[left] arr[largest]) {largest left;}if (right n arr[right] arr[largest]) {largest right;}if (largest ! i) {swap(arr[i], arr[largest]);heapify(arr, n, largest);}
}void heapSort(int arr[], int n) {for (int i n / 2 - 1; i 0; i--) {heapify(arr, n, i);}for (int i n - 1; i 0; i--) {swap(arr[0], arr[i]);heapify(arr, i, 0);}
}int main() {int arr[10];for (int i 0; i 10; i) {scanf(%d, arr[i]);}heapSort(arr, 10);for (int i 0; i 10; i) {printf(%d , arr[i]);}return 0;
}
MT1403·后3位排序 c 语言代码实现
#include stdio.h
#include stdlib.h
#define N 10int compare(const void *a, const void *b) {int num1 *(int *)a;int num2 *(int *)b;int last_1 num1 % 1000;int last_2 num2 % 1000;if (last_1 ! last_2) {return last_1 - last_2;} else {return num2 - num1;}
}int main() {int numbers[N];for (int i 0; i N; i) {scanf(%d, numbers[i]);}qsort(numbers, N, sizeof(10), compare);for (int i 0; i N; i) {printf(%d , numbers[i]);}return 0;
}
MT1404·小大大小排序 c 语言代码实现
#include stdio.h
#include stdlib.h#define SIZE 10// 升序排序的比较函数
int ascending(const void *a, const void *b) { return (*(int *)a - *(int *)b); }// 反转函数 用于将下标N到M的元素反转
void reverse(int arr[], int start, int end) {while (start end) {int temp arr[start];arr[start] arr[end];arr[end] temp;start;end--;}
}int main() {int arr[SIZE];int N, M;for (int i 0; i SIZE; i) {scanf(%d, arr[i]);}scanf(%d %d, N, M);// 对整个数组进行升序排序qsort(arr, SIZE, sizeof(int), ascending);// 反转下标 N 到 M 的部分reverse(arr, N, M);for (int i 0; i SIZE; i) {printf(%d , arr[i]);}return 0;
}
MT1405·小大大小排序II c 语言代码实现
#include stdio.h
#include stdlib.h#define SIZE 10// 升序排序的比较函数
int ascending(const void *a, const void *b) { return (*(int *)a - *(int *)b); }// 反转函数 用于将下标N到M的元素反转
void reverse(int arr[], int start, int end) {while (start end) {int temp arr[start];arr[start] arr[end];arr[end] temp;start;end--;}
}int main() {int arr[SIZE];int N;for (int i 0; i SIZE; i) {scanf(%d, arr[i]);}scanf(%d, N);// 对整个数组进行升序排序qsort(arr, SIZE, sizeof(int), ascending);// 反转下标 N 到 M 的部分reverse(arr, N, SIZE - 1);for (int i 0; i SIZE; i) {printf(%d , arr[i]);}return 0;
}
MT1406·数字重排 这道题 c 案例一直出问题 有解决的可以在评论区d我
c 语言实现
#include stdio.h
#include stdbool.h// 去重函数从数组a中去重结果存入数组b返回去重后的长度
int del(int a[], int b[], int n) {int c 0;for (int i 0; i n; i) {bool flag true;for (int j 0; j c; j) {if (a[i] b[j]) { // 如果a[i]已在b中设置标志为falseflag false;break;}}if (flag) { // 如果a[i]不在b中加入bb[c] a[i];}}return c;
}// 排序函数
void sort(int arr[], int len) {for (int i 0; i len - 1; i) {for (int j 0; j len - i - 1; j) {if (arr[j] arr[j 1]) {int temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}}
}int main() {int a, b, c, len 0;// 输入三个数字scanf(%d %d %d, a, b, c);int A[6], B[6];A[len] a * 100 b * 10 c;A[len] a * 100 c * 10 b;A[len] b * 100 a * 10 c;A[len] b * 100 c * 10 a;A[len] c * 100 a * 10 b;A[len] c * 100 b * 10 a;// 去重int newLen del(A, B, len);// 排序sort(B, newLen);// 输出结果for (int i 0; i newLen; i) {printf(%d\n, B[i]);}return 0;
}MT1407·插入 c 语言实现代码
#include stdio.h
#define SIZE 10void sort(int arr[], int len) {for (int i 0; i len - 1; i) {for (int j 0; j len - i - 1; j) {if (arr[j] arr[j 1]) {int temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}}
}int insertPoistion(int arr[], int len, int n) {int left 0;int right len - 1;while (left right) {int mid (left right) / 2;if (arr[mid] n) {left mid 1;} else {right mid - 1;}}return left;
}int main() {int arr[SIZE 1], n;for (int i 0; i SIZE; i) {scanf(%d, arr[i]);}scanf(%d, n);sort(arr, SIZE);int pos insertPoistion(arr, SIZE, n);for (int i SIZE; i pos; i--) {arr[i] arr[i - 1];}arr[pos] n;for (int i 0; i SIZE; i) {printf(%d , arr[i]);}return 0;
}
MT1408·插入 c 语言代码实现
#include stdio.hint insertPosition(int arr[], int len, int n) {int left 0;int right len - 1;while (left right) {int mid (left right) / 2;if (arr[mid] n) {left mid 1;} else {right mid - 1;}}return left;
}int main() {int N;int array[N 1];int insertNumber;scanf(%d, N);for (int i 0; i N; i) {scanf(%d, array[i]);}scanf(%d, insertNumber);int pos insertPosition(array, N, insertNumber);for (int i N; i pos; i--) {array[i] array[i - 1];}array[pos] insertNumber;for (int i 0; i N 1; i) {printf(%d , array[i]);}return 0;
}
MT1409·旋转数组 c 语言代码实现 #include stdio.hvoid rotate_array(int arr[], int length, int n) {// 处理 N 的值确保在有效范围内n n % length; // 处理 N 大于数组长度的情况if (n 0) {n length; // 将负数旋转转换为正数旋转}// 创建一个临时数组来存储旋转后的结果int temp[length];// 进行旋转for (int i 0; i length; i) {temp[(i n) % length] arr[i];}// 将结果复制回原数组for (int i 0; i length; i) {arr[i] temp[i];}
}int main() {int arr[10];int n;// 输入整型元素for (int i 0; i 10; i) {scanf(%d, arr[i]);}// 输入旋转次数 Nscanf(%d, n);// 旋转数组rotate_array(arr, 10, n);// 输出结果for (int i 0; i 10; i) {printf(%d, arr[i]);if (i 9) {printf( ); // 输出空格分隔}}printf(\n);return 0;
}MT1410·逆时针旋转数组 c 语言实现代码
#include stdio.hvoid rotateArrayCounterClockwise(int array[], int N, int M) {M M % N; // 计算有效的旋转次数int result[N];// 将前 M 个元素放在新数组的末尾for (int i 0; i N - M; i) {result[i] array[M i];}// 将前 M 个元素移动到新数组的开头for (int i 0; i M; i) {result[N - M i] array[i];}// 将新数组的内容复制到原数组for (int i 0; i N; i) {array[i] result[i];}
}int main() {int N, M;scanf(%d %d, N, M);int array[N];for (int i 0; i N; i) {scanf(%d, array[i]);}rotateArrayCounterClockwise(array, N, M);for (int i 0; i N; i) {printf(%d ,array[i]);}return 0;
}