微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用指针和无循环进行选择排序

如何解决使用指针和无循环进行选择排序

我正在尝试使用递归函数按升序对数组进行排序。问题是我不能使用任何 for、while 或 do/while 循环。网上有很多选择排序资源,但我很难找到没有循环和指针的任何内容

我正在尝试做的事情的简短分步说明。

  1. 标记放在数组的第一个元素

2.如果标记指向数组的最后一个元素,则停止。否则继续

3.找到标记右边的最小元素

4.如果此元素小于标记指向的元素,则交换

5.将标记前进到右侧的下一个元素

6.转到第 2 步

解决方法

至少,你可以使用循环来设计它,并转换循环。

任何循环都可以转换成如下形式:

State state = init();
while (cond(&state))
   body(&state);
tail(&state);

这个循环可以使用递归来实现。

void recursive(State *state) {
   if (!cond(state))
      return;

   body(state);
   recursive(state);
}

State = state = init();
recursive(&state);
tail(&state);

也就是说,正面解决这个问题要容易得多。

选择排序使用递归来实现是微不足道的。总的来说,您正在重复对数组中不断缩小的部分进行排序。将第一个元素交换为最小元素后,您需要对数组的其余部分进行排序,这可以使用递归调用轻松完成。

这让循环找到数组的最小元素。同样,根据其自身定义这是微不足道的。列表的最小元素是列表中第一个元素的最小元素和列表剩余部分的最小元素。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。