c语言插入数组排好序
时间: 2023-11-24 17:50:48 浏览: 81
以下是C语言插入数组排好序的例子:
```c
#include <stdio.h>
int main() {
int a[6] = {1, 3, 5, 7, 9}; // 已经排好序的数组
int n; // n代表我们要插入的元素。
int i, t;
scanf("%d", &n);
a[5] = n; // 把要插入的值赋给最后一个元素。
// 下面的循环就是开始比大小。
for (i = 4; i >= 0; i--) {
if (n < a[i]) {
// 这里必须是前后两个元素交换值,如果插入值是最小的,就要与每一个元素比较。
t = a[i + 1];
a[i + 1] = a[i];
a[i] = t;
} else {
break; // 没有比插入值小的话就结束循环。
}
}
for (i = 0; i < 6; i++) {
printf("%5d", a[i]);
}
return 0;
}
```
相关问题
c语言将数字按序插入数组 有一个已排好序的数组{1,4,6,9,13,16,19,28,40,100},要求输入一个数后,按原来排序的规律将它插入数组中。
在C语言中,为了保持数组有序,你可以使用二分查找法来确定给定数字应该插入的位置。以下是步骤概述:
1. 定义一个函数,比如`insert_sorted`,接受两个参数:已排序的整型数组`arr`、数组长度`size`以及需要插入的新数值`num`。
2. 使用二分查找算法找到`num`在现有数组中应插入的位置。这个位置会使得插入后的数组仍然有序。查找过程中,检查中间元素是否等于`num`,如果小于则在左半部分继续查找,如果大于则在右半部分查找,直到找到合适的插入点。
```c
int binary_search(int arr[], int size, int num) {
int low = 0;
int high = size - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == num) return mid; // 找到相等的元素直接返回
else if (arr[mid] < num) low = mid + 1; // 向右搜索
else high = mid - 1; // 向左搜索
}
return low; // 如果没找到相等元素,返回正确的插入位置
}
```
3. 在找到插入位置后,可以将新值放在该位置,并更新数组大小。
```c
void insert_sorted(int arr[], int* size, int num) {
int index = binary_search(arr, *size, num);
memmove(&arr[index+1], &arr[index], (*size - index) * sizeof(arr[0])); // 移动元素
arr[index] = num; // 插入数值
(*size)++;
}
```
4. 最后,在主程序中调用上述函数并传入相应的参数。
```c
int main() {
int arr[] = {1, 4, 6, 9, 13, 16, 19, 28, 40, 100};
int size = sizeof(arr) / sizeof(arr[0]);
int new_num;
printf("Enter a number to insert: ");
scanf("%d", &new_num);
insert_sorted(arr, &size, new_num);
// 打印插入后数组
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
生成一个c语言程序关于有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中已排好序的数组为a[5]={1,2,3,4,5}
好的,以下是您需要的C语言程序:
```c
#include<stdio.h>
int main() {
int a[6] = {1, 2, 3, 4, 5}; // 已排好序的数组
int n, i, j;
printf("请输入要插入的数:");
scanf("%d", &n);
// 从后往前遍历数组,找到插入位置
for (i = 4; i >= 0; i--) {
if (a[i] > n) {
a[i+1] = a[i];
} else {
break;
}
}
a[i+1] = n; // 插入新数
// 输出插入后的数组
printf("插入后的数组为:");
for (j = 0; j < 6; j++) {
printf("%d ", a[j]);
}
return 0;
}
```
程序思路:先定义一个已排好序的数组a,用户输入要插入的数n,从后往前遍历数组a,找到插入位置,然后将后面的数都后移一位,插入新数n,最后输出插入后的数组。
阅读全文