我正确地追踪这个吗?
问题描述:
我的计算机科学老师给我们分配了不同的排序算法来处理跟踪。我想确定我的跟踪是正确的 选择排序:我正确地追踪这个吗?
void selection sort
{
for(int i = 0; i < ray.length-1;i++)
{
int min = i
for(int j = i +1; j<ray.length;j++;)
{
if(ray[j] < ray[min])
min = j;
}
if(min != i)
{
int temp = ray[min]
ray[min] = ray[i]
ray[i] = temp;
}
}
}
原始数组= {4,2,6,3,5,1}
顺序排序的:
1st pass - 2,4,6,3,5,1
2nd pass - 2,3,6,4,5,1
3rd pass - 2,3,4,6,5,1
4th pass - 2,3,4,5,6,1
5th pass - 2,3,4,5,1,6
6th pass - 2,3,4,1,5,6
7th pass - 2,3,1,4,5,6
8th pass - 2,1,3,4,5,6
9th pass - 1,2,3,4,5,6
答
你的痕迹似乎不正确
当你开始你有阵列
{4,2,6,3,5,1}
在外环
min = i // i = 0 min = 0
在你在这一点上
{1,2,6,3,5,4}
您应该能够继续这一对的,其余做到这一点
if(ray[j] < ray[min]) //2 < 4 TRUE (j = 1 min = 0)
min = j;
//loop increment j
if(ray[j] < ray[min]) //6 < 2 FALSE (j = 2 min = 1)
//loop increment j
if(ray[j] < ray[min]) //3 < 2 FALSE (j = 3 min = 1)
//loop increment j
if(ray[j] < ray[min]) //5 < 2 FALSE (j = 4 min = 1)
//loop increment j
if(ray[j] < ray[min]) // 1 < 2 TRUE (j = 5 min = 1)
min = j;
//loop increment j (j = 6 end loop)
if(min != i) //min = 5 i = 0 TRUE
temp = ray[min] //temp = 1
ray[min] ray[i] //ray[5] = ray[0] ray[5] = 4
ray[i] = temp //ray[0] = 1
//loop increment i to 1 continue through this
阵内循环外循环
根据情况添加ac或C++标记(看起来不是java),这样你的问题就会得到更多的展示当然。 – 2012-04-02 00:53:52
当你正在做每个通行证时,你在代码中的哪个位置? – twain249 2012-04-02 00:54:53
您可以在每次通过并自行验证之前运行该程序并打印阵列。 – 2012-04-02 01:12:31