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

来源:互联网 发布:js选择日期控件 编辑:程序博客网 时间:2024/06/03 07:53

题意:给一个数组,按照模3的结果进行排序(如果模3结果一样顺序可以随意),尽量节省空间,时间。

        这个问题下午逛群看到的。

#include <stdio.h>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;}

0 0