小弟愚笨,时空间复杂度和英文都不懂,不过根据问题描述想出一个办法,不过我还没能写出代码,等下去试试
我的想法如下:
因为数据只有{1,2,3}3种可能
那么分别统计出1和2的数量
例如{2,2,1,3,3,3,2,3,1}
1有两个,2有三个。
然后进入交换环节
for(i=0; i < i1_Count; i++)
{
if (arr[i] == 1)
countinue;
else
for(j=i1_Count - 1; j < iCount; j++)
{
if( arr[j] == 1)
{
swap(arr[i],arr[j]);
iChangeCount++; //这么一小段过程我按了无数次Ctrl+S在网页上.....
break;
}
}
}
2的过程也如此类推
好吧我的语文也不行
我的想法其实是
排序后,有多少个1前几位就是1..有多少个2,那么1之后的几位也都是2,然后因为1和2都排好了那么3肯定也是全在后面了。根据这个想法那么应该就比较容易写出最小交换次数了(我想......
BTW:妹子待遇无限好
[ 本帖最后由 随风飘荡 于 2012-7-22 15:18 编辑 ]
我的想法如下:
因为数据只有{1,2,3}3种可能
那么分别统计出1和2的数量
例如{2,2,1,3,3,3,2,3,1}
1有两个,2有三个。
然后进入交换环节
for(i=0; i < i1_Count; i++)
{
if (arr[i] == 1)
countinue;
else
for(j=i1_Count - 1; j < iCount; j++)
{
if( arr[j] == 1)
{
swap(arr[i],arr[j]);
iChangeCount++; //这么一小段过程我按了无数次Ctrl+S在网页上.....
break;
}
}
}
2的过程也如此类推
好吧我的语文也不行
我的想法其实是
排序后,有多少个1前几位就是1..有多少个2,那么1之后的几位也都是2,然后因为1和2都排好了那么3肯定也是全在后面了。根据这个想法那么应该就比较容易写出最小交换次数了(我想......
BTW:妹子待遇无限好
[ 本帖最后由 随风飘荡 于 2012-7-22 15:18 编辑 ]