试图对数组进行排序

时间:2010-10-21 01:06:28

标签: c++ arrays sorting

我正在尝试将数组排序为最小到最大,而我真的迷失了......

这是我到目前为止所拥有的:

 int temp, temp2;
    for (int x = 0; x < array_size; x++)
    {
            temp=a[x];

            for (int i = 0; i < array_size; i++)
            {
                if (a[i] < temp)
                {
                    temp2=a[i];
                    a[i]=temp;
                    a[x]=temp2;
                }
            }
    }

更新:仍然无法正常工作,我必须使用代码。

int temp, temp2, x=-1;
for (int x = 0; x < array_size; x++)
{
        temp=a[x];

        for (int i = x+1; i < array_size; i++)
        {
            if (a[i] < temp)
            {
                temp2=a[i];
                a[i]=temp;
                a[x]=temp2;
            }
        }
}

4 个答案:

答案 0 :(得分:5)

除非这是家庭作业,否则您可以使用哪些功能:

#include <algorithm>
...
std::sort(a,a+array_size);

答案 1 :(得分:3)

你应该使用一个库提供的排序例程,但是,为了它的价值,规范的冒泡排序可以按如下方式完成:

def bubblesort (array, count):
    limit = count - 2
    didSwap = true
    while (didSwap) {
        didSwap = false
        for pos = 0 to limit:
            if array[pos] > array[pos+1]:
                temp = array[pos]
                array[pos] = array[pos+1]
                array[pos+1] = temp
                didSwap = true
            endif
        endfor
        limit = limit - 1
    endwhile
enddef

我只会在库提供的例程由于某种原因而无法使用的情况下使用它,即使这样,也只能用于小数据集。

它相对有效(就冒泡排序而言),因为它不会重新检查已放置在正确位置的元素(每次迭代会将另一个元素移动到列表顶部的正确位置,因此使用limit),并且在没有完成交换的迭代之后退出(即列表被排序)。

答案 2 :(得分:1)

你看过C的'qsort'方法吗?那会对你的数组进行排序。

C ++也有自己的内置排序功能,作为其标准库的一部分。

你能不使用其中任何一个吗?

在你的代码中,内部循环应该从int i = x+1;开始,而不是从0开始。

答案 3 :(得分:1)

您可以使用STL sort算法。

如果您真的想要手动编码,您可能需要进行一些更改:

在内部for循环中,更改

int i = 0

int i = x + 1

另外,将temp重新分配到a[i]内的if


以下完整代码:

// Arun Saha, 2010-Oct-20
// http://stackoverflow.com/questions/3983541/trying-to-sort-an-array

#include <iostream>
using namespace std;

void
mysort( int * a, size_t array_size ) {

    for( size_t i = 0; i < array_size; ++i ) {

        int minSoFar = a[i];

        for (size_t j = i+1; j < array_size; ++j ) {

            if( a[j] < minSoFar ) {

                minSoFar = a[j];

                int tmp = a[i];
                a[i]    = a[j];
                a[j]    = tmp;
            }
        }
    }
}

int
main() {

   int x[] = {40, 60, 10, 30, 20, 50};
   const size_t N = sizeof( x ) / sizeof( int );

   for( size_t i = 0; i < N; ++i ) {
       cout << x[ i ] << " ";
   }
   cout << endl;

   mysort( x, N );

   for( size_t i = 0; i < N; ++i ) {
       cout << x[ i ] << " ";
   }
   cout << endl;
}