在一个整型数组中插入任意一个数字,进行重新排序,用多种方法如何实现?
方法1:直接插入排序法
#include <stdio.h>
void insert(int arr[], int n, int x) {
int i, j;
for (i = 0; i < n; i++) {
if (arr[i] > x) {
for (j = n - 1; j >= i; j--) {
arr[j + 1] = arr[j];
}
arr[i] = x;
break;
}
}
if (i == n) {
arr[n] = x;
}
}
int main() {
int arr[10] = {1, 3, 5, 7, 9};
int n = 5;
int x;
printf("请输入你要插入的数字:");
scanf("%d",&x);
insert(arr, n, x);
for (int i = 0; i < n + 1; i++) {
printf("%d ", arr[i]);
}
return 0;
}
方法2:冒泡排序法
#include <stdio.h>
void bubble(int arr[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void insert(int arr[], int n, int x) {
arr[n] = x;
bubble(arr, n + 1);
}
int main() {
int arr[10] = {1, 3, 5, 7, 9};
int n = 5, x = 6;
insert(arr, n, x);
for (int i = 0; i < n + 1; i++) {
printf("%d ", arr[i]);
}
return 0;
}
方法3:选择排序法
#include <stdio.h>
void bubble(int arr[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void insert(int arr[], int n, int x) {
arr[n] = x;
bubble(arr, n + 1);
}
int main() {
int arr[10] = {1, 3, 5, 7, 9};
int n = 5, x = 6;
insert(arr, n, x);
for (int i = 0; i < n + 1; i++) {
printf("%d ", arr[i]);
}
return 0;
}
法2和法3所插入的数字是在程序中就指定了的,大家可以根据需求自行拓展!