我有这个数组:
array[0] = 18;
array[1] = -10;
array[2] = 2;
array[3] = 4;
array[4] = 6;
array[5] = -12;
array[6] = -8;
array[7] = -6;
array[8] = 4;
array[9] = 13;
如何在C ++中以asc / desc模式对数组进行排序?
答案 0 :(得分:44)
要按升序对数组进行排序,请使用:
#include <algorithm>
int main()
{
//...
std::sort(array, array+n); //where n is the number of elements you want to sort
}
要按降序排序,请使用
#include <algorithm>
#include <functional>
int main()
{
//...
std::sort(array, array+n, std::greater<int>());
}
HTH
答案 1 :(得分:2)
您可以将自定义比较函数传递给std::sort函数。
答案 2 :(得分:2)
首先,我希望您的数组分配在发布时只是一个错误,但所有数字都被分配到相同的内存位置。没有什么可以排序的。
之后,您可以使用sort()功能。链接的示例显示了使用它的简单方法。请注意,有一个未使用的参数将指定如何比较元素。默认情况下,如果您未指定参数,则使用“小于”,以便获得升序排序。更改此项以指定“大于”比较器以获得降序排序。
答案 3 :(得分:1)
通常,您可以在
中交换两个变量http://www.cplusplus.com/reference/algorithm/sort/
更改
bool myfunction (int i,int j) { return (i<j); }
到
bool myfunction (int i,int j) { return (j<i); }
您可以将其重命名为其他内容,以便在结果需要升序或降序时使用两个比较函数。
如果函数体具有复杂的表达式并多次涉及i
和j
,则更容易在参数列表中交换i
和j
而不是身体中的每个i
和j
:
bool myfunction (int j,int i) { return (i<j); }
同样如此
答案 4 :(得分:1)
#include <iostream>
#include <stdlib.h>
using namespace std;
int main (int argc, char *argv[])
{
int num[10]={18,-10,2,4,6,-12,-8,-6,13,-1};
int temp;
cout << "Ascending Sort : \n\n";
for(int i=0; i<=10; i++)
{
for(int j=i+1; j<=10; j++)
{
if(num[i]>num[j])
{
temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}
cout << num[i] << "\n";
}
cout << "\nDescending Sort : \n\n";
for(int i=0; i<=10; i++)
{
for(int j=i+1; j<=10; j++)
{
if(num[i]<num[j])
{
temp=num[j];
num[j]=num[i];
num[i]=temp;
}
}
cout << num[i] << "\n";
}
return 0;
}