X和Y的值已被替换!

来源:互联网 发布:2144剑雨江湖进阶数据 编辑:程序博客网 时间:2024/06/05 03:57
排序案例
有许多不同的情况下,排序数组可以是有用的。例如,您的电子邮件程序通常显示电子邮件接收的时间顺序,因为最近的电子邮件通常被认为是更相关的。当你去你的联系人列表时,名字通常是按字母顺序排列的,因为你更容易找到你要找的名字.。这两个演示文稿涉及排序之前提交的数据。
排序数组可以使搜索数组更高效,不仅对人类,而且对于计算机。例如,考虑要知道名称是否出现在名称列表中的情况.。为了查看列表中是否有名称,我们必须检查数组中的每个元素以查看是否出现名称。对于具有多个元素的数组,搜索它们都是昂贵的.。
但是,现在假设我们的名字是按字母顺序排序的数组。在这种情况下,我们只需要搜索到我们遇到的名字是按字母顺序大于我们所寻找的点。在这一点上,如果我们没有发现的名字,我们知道它不在阵列中的其余的存在,因为所有的名字,我们还没看到数组中的保证是按字母顺序排列的大!
事实证明,甚至有更好的算法来搜索排序数组。使用一个简单的算法,我们可以搜索排序数组包含1000000个元素只使用20个比较!缺点是,当然,排序一个数组是比较昂贵的,它往往是不值得排序数组,以使搜索快,除非你要搜索它多次。
在某些情况下,对数组进行排序可以使搜索变得不必要.。考虑另一个例子,我们想找到最好的测试分数。如果数组是无序的,我们要看看在数组中找出最大的测验分数的每一个元素。如果列表排序,最好的测试得分将在第一个或最后一个位置(取决于我们是否升序或降序排序),所以我们不需要搜索所有!
如何整理工作
排序通常是通过反复比较数组元素对它们进行交换,如果它们满足某些预定义的条件,则进行交换.。这些元素进行比较的顺序取决于哪个排序算法被使用。该标准取决于列表将如何排序(例如升序或降序)。

交换两个元素,我们可以使用std::swap()功能从C++标准库,这是在头文件中定义的算法。由于效率的原因,std::swap()感动在C++ 11本头。

234567891011#include <algorithm> // for std::swap, use <utility> instead if C++11#include <iostream> int main(){    int x = 2;    int y = 4;    std::cout << "Before swap: x = " << x << ", y = " << y << '\n';    std::swap(x, y); // swap the values of x and y    std::cout << "After swap:  x = " << x << ", y = " << y << '\n';}

注意,交换后,X和Y的值已被替换!
选择排序
有许多方法来对一个数组进行排序。选择排序可能是最容易理解的排序,这使得它是一个很好的候选人的教学,即使它是一个慢排序。
选择排序执行下列步骤:将数组从最小到最大:
1)从数组索引0开始,搜索整个数组找到最小值
2)将数组中找到的最小值与索引0的值交换
3)从下一个索引开始重复步骤1和2
换句话说,我们将在数组中找到最小的元素,并将其交换到第一个位置.。然后,我们将找到下一个最小的元素,并交换到第二个位置。这个过程将重复,直到我们用完的元素。
这里是一个例子,该算法工作在5个元素。让我们开始一个示例数组:

0 0