题目内容:
编写程序,在主函数中定义一个有10个元素的整型一维数组,用户输入9个数据,调用函数,对数组元素进行从小到大排序后,在函数中输入一个数,插入到数组中正确的位置,并输出。
输入格式:
9个整数和1个整数
输出格式:
10个整数
输入样例:
2,3,1,5,6,76,89,31,90
7
输出样例:
1,2,3,5,6,7,31,76,89,90
#include <stdio.h>
void Swap(int *a,int *b);
void Sort(int a[],int n);
void Insert(int a[],int n);
void Swap(int *a,int *b)
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
void Sort(int a[],int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=n-1;j>i;j--)
{
if(a[j]<a[j-1])
Swap(&a[j],&a[j-1]);
}
}
}
void Insert(int a[],int n)
{
int i,j;
for(i=0;i<10;i++)
{
if(a[i]>n)
{
for(j=0;j<i;j++)
{
a[j]=a[j+1];
}
a[i-1]=n;
break;
}
}
}
int main()
{
int a[10]={0};
int input ,i;
for(i=0;i<9;i++)
{
scanf("%d,",&a[i]);
}
Sort(a,10);
scanf("%d",&input);
Insert(a,input);
for(i=0;i<10;i++)
{
printf("%d,",a[i]);
}
return 0;
}
常见的排序算法:
1.插入排序,步骤(以扑克为例)
第一步:枚举每张待插入的牌;
第二步:找到待插入的位置;
void InsertionSort(int cards[], int n)
{
for (int i = 1; i < n; i++)
{
int target = cards[i], pos = 0;
while (target>cards[pos])
pos++;
for (int j = i; j > pos; j--)
cards[j] = cards[j - 1]; //待插入位置之后的元素统一往后移一位
cards[pos] = target; //插入动作
}
}
2.选择排序,步骤(以扑克为例)
第一步:枚举每个位置的牌;
第二步:每次选择最小的牌,把它插入到需要插入的位置;
void SelectionSort(int cards[], int n)
{
for (int i = 0; i < n; i++)
{
int min = cards[i], min_id = i;
for (int j = i + 1; j < n;j++)
if (cards[j] < min)
{
min = cards[j]; //更新最小值
min_id = j; //更新最小值所在的位置
}
cards[min_id] = cards[i]; //体会插入的时机
cards[i] = min;
}
}