根据模3的结果给数组排序

2019-04-14 16:03发布

题意:给一个数组,按照模3的结果进行排序(如果模3结果一样顺序可以随意),尽量节省空间,时间。         这个问题下午逛群看到的。 #include int main() { int num[] = {1,3,5,33,7,4}; int n = 6; for(int i = 0;i < 6;i ++)printf("%d ",num[i]%3);puts(""); int c1,c2,c0; //c0 为从左起最后一个余数为0后一个元素的位置 //c2 为从右起第一个余数为2前一个元素的位置 //c1 用于中间元素扫描 c0 = 0,c2 = n - 1; //确定c0,c2的位置 while(c0 < n && num[c0]%3 == 0)c0++; while(c2 >= 0 && num[c2]%3 == 2)c2--; //c1为c0的下一个位置 c1 = c0; while(c0 < c2 && c1 <= c2) { if(num[c1]%3 == 0) { swap(num[c0],num[c1]); c0++; } if(num[c1]%3 == 2) { swap(num[c2],num[c1]); c2--; } if(num[c1]%3 == 1)c1++; } for(int i = 0;i < n;i ++)printf("%d ",num[i]%3); return 0; }