在保持重复项的同时进行排序
Sort while keeping duplicates together
本文关键字:排序 更新时间:2023-10-16
>我有三个向量
vector<string> a_words0(75000);
vector<string> a_words1(75000);
vector<string> a_words2(75000);
下面考虑同一行的元素的外观:
.
.
.
It's raining outside
The warrior is
It's raining heavily
It's raining outside
.
.
.
我正在使用快速排序功能根据第一个向量进行排序,它给了我以下结果
.
.
.
It's raining outside
It's raining heavily
It's raining outside
The warrior is
.
.
.
问题是我希望重复项像这样在一起:
.
.
.
It's raining outside
It's raining outside
It's raining heavily
The warrior is
.
.
.
这是我的快速排序功能:
void quicksort(vector<string> &arr0, vector<string> &arr1,vector<string> &arr2,int low, int high)
{
int i = low;
int j = high;
string y = "Z";
/* compare value */
string z = arr0[(low + high) / 2];
/* partition */
do {
/* find member above ... */
while(arr0[i] < z) i++;
/* find element below ... */
while(arr0[j] > z) j--;
if(i <= j) {
/* swap two elements */
y = arr0[i];
arr0[i] = arr0[j];
arr0[j] = y;
y = arr1[i];
arr1[i] = arr1[j];
arr1[j] = y;
y = arr2[i];
arr2[i] = arr2[j];
arr2[j] = y;
i++;
j--;
}
} while(i <= j);
/* recurse */
if(low < j)
quicksort(arr0,arr1,arr2, low, j);
if(i < high)
quicksort(arr0,arr1,arr2, i, high);
}
您可以更改比较以比较 arr0 的两个元素,如果相同,则比较 arr1 的两个元素,如果仍然相同,则比较 arr2 的两个元素。您可以考虑将 Y 的名称更改为 T(表示临时),然后使用 X、Y、Z 作为 arr0、arr1 和 arr2 的枢轴点。
快速排序不稳定,因此不能使用从最不重要到最重要的多个排序传递。您可以使用 std::stable_sort()(通常实现为合并排序),并再次使用自定义比较,如果需要,比较 arr0、arr1 和 arr2,或者先按 arr2,然后按 arr1,然后按 arr0 对数据进行 3 次排序。
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 如何在C++中对数组进行冒泡排序