X和Y的值已被替换

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

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

#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)重复步骤2和1从下一个索引开始
换句话说,我们要在数组中找到最小的元素,并将其交换到第一个位置。然后我们要找到下一个最小的元素,并把它换到第二个位置。这个过程将被重复,直到我们用完元素。
这里是一个该算法的一个例子,工作在5个元素。让我们开始一个示例数组:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <algorithm> // for std::swap, use <utility> instead if C++11
#include <iostream>
 
int main()
{
    const int length = 5;
    int array[length] = { 30, 50, 20, 10, 40 };
 
    // Step through each element of the array
    for (int startIndex = 0; startIndex < length; ++startIndex)
    {
        // smallestIndex is the index of the smallest element we've encountered so far.
        int smallestIndex = startIndex;
 
        // Look for smallest element remaining in the array (starting at startIndex+1)
        for (int currentIndex = startIndex + 1; currentIndex < length; ++currentIndex)
        {
            // If the current element is smaller than our previously found smallest
            if (array[currentIndex] < array[smallestIndex])
                // This is the new smallest number for this iteration
                smallestIndex = currentIndex;
        }
 
        // Swap our start element with our smallest element
        std::swap(array[startIndex], array[smallestIndex]);
    }
 
    // Now print our sorted array as proof it works
    for (int index = 0; index < length; ++index)
        std::cout << array[index] << ' ';
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值