#include<stdio.h>#include<stdlib.h>
//冒泡排序 升序
void bubblesort_ascend(int* a, int len)
{
int i = 0;
int j = 0;
int temp = 0;
int anyswap = 0;
for(;i < len; ++i)
{
anyswap = 0;
for( j = 0; j < len-1-i; ++j)
{
if(a[j] > a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
anyswap = 1;
}
}
if(!anyswap)
{
break;
}
}
}
//直接选择排序 降序
void sele_descend(int* a, int len)
{
int i = 0;
int j = 0;
int cur_max_index = 0;
int cur_max = 0;
int temp = 0;
for(; i < len-1 ; ++i)
{
cur_max = a[i];
cur_max_index = i;
for(j = i+1; j<len; ++j)
{
if(a[j] > cur_max)
{
cur_max = a[j];
cur_max_index = j;
}
}
if(cur_max_index != i)
{
temp = a[cur_max_index];
a[cur_max_index] = a[i];
a[i] = temp;
}
}
}
// 将升序后的a 和 降序后的b 合并到c,并且 结果为升序
void combie_ascend(int* a, int len_a, int* b, int len_b,int*c, int len_c)
{
int cur_index_c = 0;
int cur_index_a = 0;//a 为升序,最小的元素下标是0
int cur_index_b = len_b-1;//b 为降序,最小的元素是最后一个
for(cur_index_c = 0; (cur_index_c<len_c) && (cur_index_a<len_a) && (cur_index_b >=0); ++cur_index_c) //防止a,b,c 溢出
{
if( a[cur_index_a] < b[cur_index_b]) // 如果当前b的元素比a的元素大,插入a的元素
{
c[cur_index_c] = a[cur_index_a];
cur_index_a++;
}
else // 否则插入b的元素
{
c[cur_index_c] = b[cur_index_b];
cur_index_b--;
}
}
if(cur_index_c == len_c) // c溢出 返回
return;
else // c 无溢出, 检查a,b 其中一个有无剩余元素, 若都有 则不可能到达这里
{
for(;cur_index_c < len_c && cur_index_a < len_a; ++cur_index_c,++cur_index_a)
{
c[cur_index_c] = a[cur_index_a];
}
for(;cur_index_c < len_c && cur_index_b >= 0; ++cur_index_c,--cur_index_b)
{
c[cur_index_c] = b[cur_index_b];
}
}
}
void show_array(int* a, int len)
{
int i= 0;
for(;i<len;++i)
printf("%d ",a[i]);
printf("\n");
}
int main()
{
int a[] = {3,23,34,5,2,67,4,7,23};
int b[] = {29,43,2,64,2321,6,457,4};
int c[1000] = {0};
int len_a = sizeof(a)/sizeof(a[0]);
int len_b = sizeof(b)/sizeof(b[0]);
int len_c = sizeof(c)/sizeof(c[0]);
int show_len_c;
bubblesort_ascend(a,len_a);
sele_descend(b,len_b);
show_array(a,len_a);
show_array(b,len_b);
combie_ascend(a,len_a,b,len_b,c,len_c);
show_len_c = ((len_a+len_b) < len_c) ?(len_a+len_b):len_c;
show_array(c,show_len_c);
system("pause");
return 0;
}
参考资料:两种排序方法,一个合并函数(考虑溢出情况),望采纳……