-5

我在 c 中有一个数组(2D):

80|100|70|50|120

A|C|D|F|K

我需要将其分类为:

50|70|80|100|120

F|D|A|C|K

我正在使用 c 或 c++。请帮我。

谢谢。

4

5 回答 5

2

您还有qsort,std::sort以及使用示例。

于 2013-01-17T05:00:17.017 回答
1

在 C++ 中:

std::vector<int> keys;
std::vector<char> values;
std::map<int, char> kvtable;

keys.push_back(80);
values.push_back('A');

keys.push_back(100);
values.push_back('C');

keys.push_back(70);
values.push_back('D');

keys.push_back(50);
values.push_back('F');

keys.push_back(120);
values.push_back('K');

int i;
for (i = 0; i < keys.size(); i++) {
    kvtable[keys[i]] = values[i];
}

std::sort(keys.begin(), keys.end());

for (i = 0; i < keys.size(); i++) {
    std::cout << keys[i] << " = " << kvtable[keys[i]] << "\n";
}
于 2013-01-17T05:27:56.147 回答
0

我认为您应该做的是创建一个实用的一维指针数组,指向数组的第一维,并提供自定义比较函数来对实用程序数组进行排序。然后您可以进行指针数学运算以创建数组的排序副本(并在必要时使用 memcpy 覆盖原始数组)

static int ARRAY_LEN = 5;

int[2][ARRAY_LEN] origArray;
int*[ARRAY_LEN] pointerArray;

for(int i = 0; i < ARRAY_LEN; i++){
    pointerArray[i] = &origArray[0][i];  //create the pointer array
}

qsort(pointerArray, ARRAY_LEN, sizeof(int*), compar); //sort the pointer array

/*We need to define the comparison function */
int compar ( const void * elem1, const void * elem2 ){
    return **(int**)elem1 - **(int**)elem2;
} 

int[2][ARRAY_LEN] sortedArray;

for(int i = 0; i < ARRAY_LEN; i++){
    int* curr = pointerArray[i];
    int firstDimValue = *curr; // get the first dimension of the ith element of the sorted array
    int secondDimValue = curr[ARRAY_LEN]; // get the 2nd dimension of the ith element of the sorted array - this works because of the way that 2D arrays are laid out in memory

    sortedArray[0][i] = firstDimValue;
    sortedArray[1][i] = secondDimValue;
}
于 2013-01-17T05:35:03.757 回答
0
  1. 创建一个数组来保存这样的数字:

    整数数组[5] = {80,100,70,50,120};

2.创建一个函数来比较两个元素:

   bool compare(int a,int b)
{
   return a<b; //ASC
}

3.使用库函数 sort() :

sort(array,array+5,compare);

4.现在数组已经被ASC正确排序了。

于 2013-01-17T09:56:20.043 回答
0

像这样的排序有很多类型:

void Swap(int &x,int &y)   //not sort, just for swap two elems
{
    int temp;
    temp=x;
    x=y;
    y=temp;
} 

void StraightInsertSort(int elem[],int n) 
{
    int i,j,temp;
    for(i=1;i<n;i++)
    {
        temp=elem[i];
        for(j=i-1;j>=0&&temp>elem[j];j--)
        {
            elem[j+1]=elem[j];
        }
        elem[j+1]=temp;
    }
}

void SimpleSelectSort(int elem[],int n) 
{
    for(int i=0;i<n-1;i++)
    {
        int lowIndex=i;
        for(int j=i+1;j<n;j++)
        {
            if(elem[j]>elem[lowIndex])
            lowIndex=j;
        }
    Swap(elem[i],elem[lowIndex]);
    }
}

void Bubblesort(int elem[],int n)
{
    for(int i=n-1;i>0;i--)
    {
        for(int j=0;j<i;j++)
        {
            if(elem[j]<elem[j+1])
            {
                Swap(elem[j],elem[j+1]); 
            }
        }
    }
}
于 2013-01-17T10:03:30.530 回答