我在 c 中有一个数组(2D):
80|100|70|50|120
A|C|D|F|K
我需要将其分类为:
50|70|80|100|120
F|D|A|C|K
我正在使用 c 或 c++。请帮我。
谢谢。
在 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";
}
我认为您应该做的是创建一个实用的一维指针数组,指向数组的第一维,并提供自定义比较函数来对实用程序数组进行排序。然后您可以进行指针数学运算以创建数组的排序副本(并在必要时使用 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;
}
创建一个数组来保存这样的数字:
整数数组[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正确排序了。
像这样的排序有很多类型:
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]);
}
}
}
}