据说是淘宝面试题“给定一个数组将大于0的放在最右边,等于0的放在中间,大于0的放在最左边”
2013-09-23 11:30
771 查看
给定一个数组将大于0的放在最右边,等于0的放在中间,大于0的放在最左边;
#include <stdio.h> #include <stdlib.h> #include <time.h> #define random (rand()%10-5) void swap(int *a, int *b)//交换两个整型数 { int t = *a; *a = *b; *b = t; } void move_array(int a[], int n) { int *low = a, *high = a + n-1; while(low < high) { while(*low < 0 && low < high) low++; while(*high > 0 && high > low) high--; if(low < high) swap(low, high); } //循环结束后low一定等于high且指向大于等于0的数 //第二步,从low开始,将等于0得数移到左边 high = a + n-1; while(low < high) { while(*low == 0 && low < high) low++; while(*high > 0 && high > low) high--; if(low < high) swap(low, high); } } int main() { srand(time(NULL)); int a[10]; int i; for(i = 0; i < 10; i++) { a[i] = random; } move_array(a, 10); for(i = 0; i < 10; i++) { printf("%-5d", a[i]); } printf("\n"); return 0; }
相关文章推荐
- 这是一个我面试某公司的算法题目:对一个字符数组进行排序,根据给定的字符,大于它的,放在数组的左边,小于它的,放在数组的右边,且数组中的元素之间的相对位置要保持不变。
- 给定一个无序数组,请调整该数组,调整成奇数放在数组的左边,偶数放在数组的右边。但是奇数与奇数之间的相对顺序不变,偶数和偶数之间的相对顺序也不变。
- 在一个数组中,找出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。
- 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
- 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 一个int数组, 比如 array[],里面数据无任何限制,要求求出 所有这样的数array[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现
- 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
- 划分一个整形数组,把负数放在左边,零放在中间,正数放在右边
- 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 一个int数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。
- 81 第1 组百度面试题 数组 左边的数都小于等 于它,右边的数都大于等于它
- 一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。
- 给定一个整型数组,求数组元素大于等于所有元素平均值的元素个数
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。要求:空间复杂度O(1),时间复杂度为O(n)
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数---百度笔试题
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数