C语言输入n(1<=n<=100),输入n个整数,对着n个整数采用直接插入排序方法进行升序排序,输出前三趟以及最终的排序序列调用print_array(int *arr, int n)输出前三次插入操作后的序列,以及最终的升序序列
时间: 2024-09-25 12:02:42 浏览: 34
C语言实现选择排序、直接插入排序、冒泡排序的示例
在C语言中,你可以使用插入排序算法对n个整数进行升序排列。插入排序的基本思想是将数组分为已排序和未排序两部分,每次从未排序的部分取出一个元素,在已排序部分找到它应该插入的位置并移动其他元素。以下是实现步骤:
1. 定义一个函数insertion_sort(),接受一个整型数组arr和它的长度n作为参数。
2. 使用for循环遍历数组,从第二个元素开始(索引i=1),依次执行以下操作:
a. 创建一个临时变量temp存储当前元素。
b. 检查前一个元素(arr[i-1])是否大于temp,如果是,则不断交换这两个元素,直到找到合适的位置插入。
c. 更新数组,把已经插入到正确位置的元素移到下一个位置。
3. 对于前三趟(通常第一次就是整个数组),在完成每轮排序后打印数组,使用print_array(arr, i)函数。
4. 循环结束后,整个数组就被排序了,再调用一次print_array(arr, n)显示最终的升序序列。
下面是一个简单的示例代码片段:
```c
#include <stdio.h>
// 插入排序函数
void insertion_sort(int arr[], int n) {
for (int i = 1; i < n; ++i) {
int key = arr[i];
int j = i - 1;
// 将较大的元素逐步向右移位
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
// 打印数组函数
void print_array(int arr[], int n) {
for (int i = 0; i < n; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int n;
printf("Enter the number of elements (1 <= n <= 100): ");
scanf("%d", &n);
// 确保输入有效
if (n < 1 || n > 100) {
printf("Invalid input. Exiting...\n");
return 1;
}
int arr[n];
printf("Enter %d integers: ", n);
for (int i = 0; i < n; ++i) {
scanf("%d", &arr[i]);
}
insertion_sort(arr, n);
// 输出前三趟排序结果
printf("First three passes:\n");
print_array(arr, min(3, n));
// 最终升序序列
printf("Final sorted array:\n");
print_array(arr, n);
return 0;
}
```
阅读全文