排序算法
中位数是指在一组数据中,按数值大小排序后处于中间位置的数。例如:1, 5, 3 排序后为 1, 3, 5,则其中位数为 3。特别地,当数的个数 N 为偶数时,中位数取位置居中的两个数 (N/2 和 N/2+1) 的平均值
#include<stdio.h>
int main(){
int b, i,n, c;
double a[100],y; //定义成double类型;
while (scanf("%d", &n) != EOF){
for (i = 0; i<n; i++)
scanf("%lf", &a[i]);
for (i = 0; i<n; i++) {
for (b = 0; b<n; b++){
if (a[i]<a[b]) {
c = a[i]; a[i] = a[b]; a[b] = c;
}
if (n % 2 != 0) {
n = n / 2 + 1; y =a[n-1];
}
else {
n = n / 2;
y = (a[n] + a[n-1]) / 2; }
printf("%.2lf\n", y);
}
}
}
return 0;
}
对10个数进行排序
#include<stdio.h>
#define N 10
int main(){
int i,j,a[N],temp;
printf("请输入 10 个数字:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++){
int min=i;
for(j=i+1;j<N;j++)
if(a[min]>a[j]) min=j;
if(min!=i){
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
printf("排序结果是:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
#include<stdio.h>
int main() {
int opo[11]={1,4,6,9,13,16,19,28,40,100};//原始数组
int a,b,c,e;
scanf("%d",&b);
for(c=9;c>=0;c--){ //使用逆序
if(b<opo[c]) {
opo[c+1]=opo[c];
}else {
opo[c+1]=b;break;
}
if(c==0) opo[0]=b; //不能比第一个小的
}
for(e=0;e<=10;e++)
printf("%d ",opo[e]);
}
解法2
#include<stdio.h>
int main(){
int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
scanf("%d",&number);
end=a[9];
if(number>end)
a[10]=number;
else{
for(i=0;i<10;i++){
if(a[i]>number){
temp1=a[i];
a[i]=number;
for(j=i+1;j<11;j++){
temp2=a[j];
a[j]=temp1;
temp1=temp2;
} break;
}
}
}
for(i=0;i<11;i++)
printf("%4d",a[i]);
return 0;
}
输入3个数a,b,c,按大小顺序输出
# include<stdio.h>
void swap(int *, int *);
int main(void){
int a, b, c;
int *p1, *p2, *p3;
printf("输入 a, b ,c:\n");
scanf("%d %d %d", &a, &b, &c);
p1 = &a;p2 = &b;p3 = &c;
if(a>b)
swap(p1, p2);
if(a>c)
swap(p1, p3);
if(b>c)
swap(p2, p3);
printf("%d %d %d\n", a, b, c);
}
解法2
#include<stdio.h>
void sort(int *a,int *b,int *c){
int max,min,temp;
max = *a > *b ? (*a > *c ? *a : *c) : (*b > *c ? *b : *c);
min = *a < *b ? (*a < *c ? *a : *c) : (*b < *c ? *b : *c);
temp = *a + *b + *c - max - min;
printf("%d %d %d",min,temp,max);
}
int main(void){
int a,b,c;
printf("输入 a, b ,c:\n");
scanf("%d%d%d",&a,&b,&c);
sort(&a,&b,&c);
return 0;
}
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
#include<stdio.h>
#define N 80
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
int main(){
int a[N], n, maxpos = 0, minpos = 0;
int i,max, min;
printf("请输入数组元素个数:");
scanf("%d",&n);
printf("请输入数组元素:\n");
for( i = 0; i < n; i++)
scanf("%d",&a[i]);
max = min = a[0];
for( i = 0; i < n; i++){
if(max < a[i]){
max = a[i];
maxpos = i;
}
if(min > a[i]){
min = a[i];
minpos = i;
}
}
swap(&a[0],&a[maxpos]);
swap(&a[n - 1],&a[minpos]);
for( i = 0; i < n; i++)
printf("%d ",a[i]);
return 0;
}
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
#include<stdio.h>
#define N 80
void reverse(int a[],int low,int high){
int i = low;
int j = high;
while(i < j){
if(i < j) {
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
i++;
j--;
}
}
int main(){
int n, m, a[N];
printf("需要输入几个数?\n");
scanf("%d",&n);
printf("请输入%d个数:\n",n);
for(int i = 0; i < n; i++){
scanf("%d",&a[i]);
}
printf("请输入移动位置大小:\n");
scanf("%d",&m);
reverse(a,0,n - 1);
reverse(a,0,m - 1);
reverse(a,m,n - 1);
for(int i = 0; i < n; i++){
printf("%d ",a[i]);
}
return 0;
}