#include <stdio.h>
#include <time.h>
/*将前k个元素读入数组并(以递减的顺序)对其排序。
接着,将剩下的元素再逐个读入 如果它小于数组中的第k个元素则忽略
否则 就将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组
*/
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
int key(int *a,int len,int k);
int location(int *a,int len,int ins);
void insert(int *a,int len,int insKey);
int main(void){
int count;
printf("请输入元素的个数N:");
scanf("%d",&count);
int k=count/2;
int time1=clock();
int i;
//输入的所有元素 保存在数组a
int a[count];
//排序后的前k个元素 保存在数组b
int b[k];
int input;
for(i=0;i<count;i++){
scanf("%d",&input);
a[i]=input;
}
//将前k个元素赋值geib
for(i=0;i<k;i++){
b[i]=a[i];
}
for(i=0;i<k;i++){
printf("%d ",b[i]);
}
printf("\n");
//对b进行排序
BubbleSort(b,k);
for(i=0;i<k;i++){
printf("%d ",b[i]);
}
printf("\n");
//插入操作
for(i=k;i<count;i++){
if(a[i]>b[k-1])
insert(b,k,a[i]);
}
int time2=clock();
printf("%d time:\%lf",b[k-1],(time2-time1));
return 0;
}
//降序后返回最小的值
int key(int *a,int len,int k){
int i,j,tmp;
for(i=0;i<len-1;i++){
for(j=0;j<len-1-i;j++){
if(*(a+j)<*(a+j+1)){
SWAP(*(a+j),*(a+j+1),tmp);
}
}
}
return *(a+k-1);
}
//插入操作(要插入的数组,数组长度,插入的值)
void insert(int *a,int len,int insKey){
int locat;
locat=location(a,len,insKey);
int tmp[len];
for(int i=0;i<len;i++){
tmp[i]=*(a+i);
}
for(int i=locat;i<len-1;i++){
*(a+i+1)=tmp[i];
}
*(a+locat)=insKey;
}
//得到插入位置(插入数组,数组长度,插入的值)
int location(int *a,int len,int ins){
int i=0;
while(ins<*(a+i)&&i<len){
i++;
}
if(i<len){
return i;
}else{
printf("未找到插入位置");
return -1;
}
}
#include <time.h>
/*将前k个元素读入数组并(以递减的顺序)对其排序。
接着,将剩下的元素再逐个读入 如果它小于数组中的第k个元素则忽略
否则 就将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组
*/
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
int key(int *a,int len,int k);
int location(int *a,int len,int ins);
void insert(int *a,int len,int insKey);
int main(void){
int count;
printf("请输入元素的个数N:");
scanf("%d",&count);
int k=count/2;
int time1=clock();
int i;
//输入的所有元素 保存在数组a
int a[count];
//排序后的前k个元素 保存在数组b
int b[k];
int input;
for(i=0;i<count;i++){
scanf("%d",&input);
a[i]=input;
}
//将前k个元素赋值geib
for(i=0;i<k;i++){
b[i]=a[i];
}
for(i=0;i<k;i++){
printf("%d ",b[i]);
}
printf("\n");
//对b进行排序
BubbleSort(b,k);
for(i=0;i<k;i++){
printf("%d ",b[i]);
}
printf("\n");
//插入操作
for(i=k;i<count;i++){
if(a[i]>b[k-1])
insert(b,k,a[i]);
}
int time2=clock();
printf("%d time:\%lf",b[k-1],(time2-time1));
return 0;
}
//降序后返回最小的值
int key(int *a,int len,int k){
int i,j,tmp;
for(i=0;i<len-1;i++){
for(j=0;j<len-1-i;j++){
if(*(a+j)<*(a+j+1)){
SWAP(*(a+j),*(a+j+1),tmp);
}
}
}
return *(a+k-1);
}
//插入操作(要插入的数组,数组长度,插入的值)
void insert(int *a,int len,int insKey){
int locat;
locat=location(a,len,insKey);
int tmp[len];
for(int i=0;i<len;i++){
tmp[i]=*(a+i);
}
for(int i=locat;i<len-1;i++){
*(a+i+1)=tmp[i];
}
*(a+locat)=insKey;
}
//得到插入位置(插入数组,数组长度,插入的值)
int location(int *a,int len,int ins){
int i=0;
while(ins<*(a+i)&&i<len){
i++;
}
if(i<len){
return i;
}else{
printf("未找到插入位置");
return -1;
}
}