作业帮 > 综合 > 作业

设有n个-100~100之间的随机数组储存于数组S中,写出算法 Rearrange(s,h,n),使得负数排在非负数前.

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/05 09:34:58
设有n个-100~100之间的随机数组储存于数组S中,写出算法 Rearrange(s,h,n),使得负数排在非负数前.
帮个忙啦,帖子在问问里
设有n个-100~100之间的随机数组储存于数组S中,写出算法 Rearrange(s,h,n),使得负数排在非负数前.
既然已经知道是-100到100之间,那就非常简单了
void rearrange(int s[],in h[],int n) { //s为原数组,h为目标数组,n为原数组长度
int numbers[201] = {0};//用来标示-100~100对应的位置
const int SHIFT = 100; //偏移量
int index = 0,numbers_index = 0;
for (; index != n; ++index) {
++numbers[s[index] + SHIFT]; //每个整数值加偏移调整后存入numbers
}
index = 0;
for (; numbers_index != 201; ) { //遍历每一个numbers[]的值
int temp_index = 0; // 用于遍历重复的某一个值
int count = numbers[index]; // 用于标示某一个值重复了几次
for (; temp_index != count; ++temp_index) {
h[index] = numbers[numbers_index]; // 每一个h[]的元素从小到大依次赋值
++index;
}
++numbers_index;
}
}
不是什么高手,也就看了些书而已,算法应该是很直观的,虽然你可以使用普通的排序算法,诸如最简单的冒泡排序,不过那样就没有充分利用已知的值在一个区间内的条件!
你可以这样想,既然每个值都在区间内,那么就相当于一个数轴,每一个值肯定对应一个点,比如85就在85那个点,-20就在-20那个点,把每一个值这样一一对应好,h然后从小到大开始查看数轴,比如34这个点上显示有两个对应,那就说明原数组内有两个34,就要输出34两次!另外由于数组索引都是从0开始,所以定义了常量SHIFT用来修正偏移!
设有n个-100~100之间的随机数组储存于数组S中,写出算法 Rearrange(s,h,n),使得负数排在非负数前. 顺序表存放在数组S中表达指针为h表长为n,写出函数count-neg(s,h,n)顺序表中负数的个数,通过函数的返 设有一个含n个元素的数组,数组元素为自然数,写出一个算法,将所有值为素数的元素排在所有值为奇数的元素之前,将所有值为奇数 1.设有一个含n个元素的数组,数组元素为自然数,写出一个算法,将所有值为素数的元素排在所有值为奇数的元素之前,将所有值为 输入10个整数在数组s中,统计正数的个数、负数的个数及0的个数. 使用随机函数“rand()”,生成10个[1,100]之间的整数并存于数组中,首先输出数组各元素值.然后 使用随机函数“rand()”,生成10个[1,100]之间的整数并存于数组中,首先输出数组各元素值.请统计 C语言 已知一个大小为15的数组,随机生成15个100-200之间的数存入该数组中并显示出数组中的偶数 用VB编程:随机产生10个0~100之间的随机整数,存放在一个数组中,然后求个元素和、平均值,统计 VB单击Command1,随机生成100个大写英文字母存于数组a中,并显示在Text1中,字母之间用空格隔开 设数组R中n(n>1)个元素中有多个零元素,试设计一个算法将R中的所有非零元素依次移动到R数组的前端 VB编程,分别用选择排序法和冒泡排序法实现有N个元素数组的排序.N由键盘输入,数组元素的值在1~200之间,随机产生