题目:用插入排序对一组数据排序。
问题描述:
输入一个长度为n(3<n<100)的整数数组,实现用插入排序对数组中的元素排序,并输出前三趟排序后的数据。
输入格式:
首先输入串的长度n,然后输入整数数组n.
输出格式:
在三行上输出前三趟插入排序后的数组。
样例输入:
8
17 46 32 87 58 9 50 38
样例输出:
17 46 32 87 58 9 50 38
17 32 46 87 58 9 50 38
17 32 46 87 58 9 50 38
//直接插入排序
#include <bits/stdc++.h>
#define MAX_SIZE 100
using namespace std;
//打印数组
void printArray(int* nums, int length){
for(int i = 0; i < length; i++){
printf("%d ", nums[i]);
}
printf("\n");
}
void insertSort(int* nums, int length){
int insertNum;
for (int i = 0; i < length - 1; i++)
{
// 遍历所有元素
if (nums[i + 1] < nums[i])
{
// 找到需要插入的元素
insertNum = nums[i + 1];
for (int j = 0; j < i + 1; j++)
{
// 从左往右寻找插入位置
if (insertNum <= nums[0])
{
for (int k = i + 1; k > 0; k--)
{
// 从j + 1 开始向右移动一位,同时
nums[k] = nums[k - 1];
}
nums[0] = insertNum;
break;
}
if (insertNum >= nums[j] && insertNum <= nums[j + 1])
{
// 找到插入位置为 j + 1
for (int k = i + 1; k > j + 1; k--)
{
// 从j + 1 开始向右移动一位,同时
nums[k] = nums[k - 1];
}
nums[j + 1] = insertNum;
break;
// 移动完成后插入j + 1,一趟完成
}
}
}
printArray(nums, length);
if (i == 2)
break;
}
}
int main(void){
int nums[MAX_SIZE];
int length = 0;
// printf("请输入数组的长度:");
scanf("%d", &length);
// printf("请输入数组元素:");
if(length < 4 || length > MAX_SIZE)
return 0;
for(int i = 0; i < length; i++){
scanf("%d", &nums[i]);
}
insertSort(nums, length);
return 0;
}