首页 > 试题广场 >

对一个unsigned int32型数组a进行排序,记ni为

[问答题]
对一个unsigned int32型数组a进行排序,记ni为a[i]的二进制表示中"1"的数量,指定排序策略如下:
a)            如果ni < nj,则a[i]排在a[j]前面
b)           如果ni == nj,按值从小到大排序
# include <string.h>
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
int fun1(int x)
{
 int count  = 0;
 while(x)
 {
  count++;
  x=x&(x-1);
 }
 return count;
}
void swap(int *i,int *j)
{
 *i = *i^*j;
 *j = *i^*j;
 *i = *i^*j;
}
int main()
{
  int n =5;
  int a[n];
  int x;
  int count1,count2;
  for (int i = 0; i < n; ++i)
  {
  printf("please input the number:\n");
  std::cin>>x;
  a[i] = x;
  }
  for (int i = 1; i < n; ++i)
  {
   for (int j = n-1; j >=i; --j)
   {
      count1 = fun1(a[j]);
      count2 = fun1(a[j-1]);
      if(count1 == count2)
      {
       if(a[j]<a[j-1])   swap(&a[j],&a[j-1]);
       else continue;
      }
      else if(count1 < count2)   swap(&a[j],&a[j-1]);
      else continue;
   }
  for (int i = 0; i < n; ++i)
  {
   std::cout<<a[i]<<"  ";
  }
  printf("\n");
  }

}
发表于 2015-06-23 21:08:52 回复(0)
是让重新排序嘛。。
发表于 2014-11-24 14:56:17 回复(2)