我正在尝试将数组排序为最小到最大,而我真的迷失了......
这是我到目前为止所拥有的:
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;
}
}
}
答案 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;
}