首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C/C++中以递增的值对2D数组进行排序; 排序后知道原始位置?

在C/C++中,对2D数组进行排序并找到排序后的原始位置,可以通过以下步骤实现:

  1. 将2D数组转换为一维数组,并将数组元素及其原始位置存储在结构体中。
  2. 使用排序算法对一维数组进行排序。
  3. 根据排序后的数组元素在结构体中的位置,找到原始位置。

以下是一个示例代码:

代码语言:c++
复制
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

struct Element {
    int value;
    int row;
    int col;
};

bool compare(const Element &a, const Element &b) {
    return a.value < b.value;
}

int main() {
    int arr[3][3] = {
        {9, 4, 5},
        {7, 2, 1},
        {8, 3, 6}
    };

    vector<Element> elements;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            elements.push_back({arr[i][j], i, j});
        }
    }

    sort(elements.begin(), elements.end(), compare);

    for (const auto &e : elements) {
        cout << "Value: " << e.value << ", Original position: (" << e.row << ", " << e.col << ")"<< endl;
    }

    return 0;
}

输出结果:

代码语言:txt
复制
Value: 1, Original position: (1, 2)
Value: 2, Original position: (1, 1)
Value: 3, Original position: (2, 2)
Value: 4, Original position: (0, 1)
Value: 5, Original position: (0, 2)
Value: 6, Original position: (2, 0)
Value: 7, Original position: (1, 0)
Value: 8, Original position: (2, 1)
Value: 9, Original position: (0, 0)

这个示例代码首先将2D数组中的元素及其原始位置存储在一个结构体数组中,然后使用std::sort函数对结构体数组进行排序,最后输出排序后的结果及其原始位置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

文心一言 VS 讯飞星火 VS chatgpt (73)-- 算法导论7.1 4题

如果要修改QUICKSORT使其递增进行排序,可以考虑以下几种方法: 1.自定义比较函数 QUICKSORT使用比较函数是比较数组两个元素,然后根据它们来决定它们应该排在哪一组子序列里面...对于一个非递增数组原始QUICKSORT将返回一个递增排序结果(因为它总是选择最小或最大作为枢轴)。而修改QUICKSORT则可以随机地选择枢轴,因此可以得到一个非递增排序结果。...在这里插入图片描述 chatgpt: 要修改快速排序算法实现非递增排序,只需原始快速排序算法进行一些变动即可。...: 1. quicksort 函数,修改递归调用顺序,先左子数组进行排序(quicksort(array, low, pivot - 1)),再右子数组进行排序(quicksort(array...这将改变元素处理顺序,使得数组递增进行排序。 2. partition 函数,将大于等于 pivot 元素移到子数组左侧。

15420
  • 十大排序——最全最详细,一文让你彻底搞懂

    ,直到找到已排序元素小于或者等于新元素位置; 5.将新元素插入到该位置; 6.重复步骤2~5。...因此,调用一些函数或者使用STL时候,记得看到优先队列,就知道是堆这样结构。...堆排序过程是弹出最大。我们每次都把最大放最后, // 得到效果就是递增数组。...算法描述 1.找出待排序数组中最大和最小元素; 2.统计数组每个为i元素出现次数,存入数组C第i项; 3.所有的计数累加(从C第一个元素开始,每一项和前一项相加); 4.反向填充目标数组...算法描述 1.取得数组最大数,并取得位数; 2.arr为原始数组,从最低位开始取每个位组成radix数组; 3.radix进行计数排序(利用计数排序适用于小范围数特点)。

    90321

    808《数据结构》参考答案

    答:程序如下所示: 思路提示:将10个数字先排序,若由小到大排序,则最大和次大分别对应排序数组中最后一个和倒数第二个;若由大到小排序,则最大和最小分别对应排序数组第一个和第二个。...从键盘输入10个整数到一个一维数组,采用起泡排序这10个整数进行从小到大排序,输出排序结果。...二叉排序特点是,若左子树非空,则左子树上结点均小于根结点;若右子树非空,则右子树上结点均大于根结点。所以根据这一特点,可以看出二叉排序序遍历是一个递增序列。...二叉链表为存储结构,二叉树删除以x为根结点子树。 答:程序如下所示: 思路:二叉链表进行遍历,遍历过程查找结点x并记载其双亲,然后将结点x双亲结点中指向结点x指针置空。...假设顺序表L元素递增排列,设计算法顺序表插入元素x,要求插入仍保持其递增有序性。

    69510

    笨办法学 Python · 续 练习 22:后缀数组

    我只是按顺序取下字符串后缀,然后列表进行排序。...一旦我有了这个列表,那么我可以通过这个列表二分搜索,来找到我想要任何后缀。这个例子很简陋,但是实际代码,你可以很快地做到它,你可以跟踪所有的原始索引,所以你可以引用后缀原始位置。...我跳起来走到白板,向那个家伙解释如何制作一个后缀树,它如何提高搜索性能,修改排序如何更快,后缀树工作原理,为什么它比三叉搜索树更好,以及如何在 C 实现。...他摇摇头,拿着他东西,起身说:“好吧,我会让大家知道想法。” 几分钟,下一个面试官来了。他抬头看着白板,笑了起来并嘲笑我,然后问我另一个 C++ 模板元编程问题,我无法回答。...该类将使用一个字符串,将其拆成后缀列表,然后进行以下操作: find_shortest 找到它开始最短子串。

    1K20

    c++期末总结

    0、c++期末总结 0.1、程序构成 一个C++程序可以由一个程序单位或多个程序单位构成。每一个程序单位作为一个文件。程序编译时,编译系统分别对各个文件进行编译,因此,一个文件是一个编译单元。...0.2、程序编写与实践 用高级语言编写程序称为“源程序”,C++源程序是以.cpp作为后缀 源程序(.cpp)进行编译 ➡ 目标程序(.obj) ➡ 二进制文件(.exe) 编写C++程序一般需要经过几个步骤是...; 注意: 两个整数相除结果依然是整数(这里不进行四舍五入,直接舍去小数点后面数字) C++两个小数可以相除 运算两个数中有一个数为float型数据,则运算结果是double型,因为C++在运算时所有...前置递增变量进行++,再计算表达式 后置递增先计算表达式,变量进行++ //递增 int main() { //后置递增 int a = 10; a++; //等价于a =...++,再计算表达式 int a2 = 10; int b2 = ++a2 * 10; cout << b2 << endl; //110 //后置递增先计算表达式,变量进行++ int

    12900

    云课五分钟-0B快速排序C++示例代码-注释和编译指令

    通过遍历每个网格单元,并进行DFS搜索,找到当前网格单元为起点最长递增路径。使用一个缓存数组 cache 来记录每个网格单元对应最长路径长度,避免重复计算。...最终遍历整个网格,找到最长路径长度,即为结果。 您提供代码是一个二维矩阵寻找最长递增路径长度问题。...其中,partition函数用来确定基准元素位置,quickSort函数用来递归地左右子序列进行排序。最终,程序输出排好序数组。...获取数组长度 int n = arr.size(); // 对数组进行快速排序 quickSort(arr, 0, n - 1); // 打印排序数组元素 for (auto i : arr...使用for_each()函数来遍历和打印数组元素,这是C++98提供一种遍历容器方法。这里还使用了lambda表达式作为函数参数,简化代码。

    14910

    深入探讨C++双向链表:构建高效数据结构关键方法与实用技巧(上)

    因此,让我们一起探索std::list奥秘,领略其C++编程独特魅力吧!...反转和排序: reverse();:反转链表。 sort();:链表元素进行排序。...⚽三、list迭代器 C++,std::list迭代器提供了链表元素进行遍历能力,但由于std::list是双向链表,其迭代器是双向迭代器,不支持随机访问。...⚽四、list元素访问 C++std::list容器,元素访问方式与数组或std::vector等序列容器有所不同,因为std::list是一个双向链表。...⚽七、list排序 7.1 排序 C++,std::list容器支持排序操作,但它不提供像std::sort这样通用排序函数(因为std::sort需要随机访问迭代器,而std::list只提供双向迭代器

    10710

    算法和数据结构:归并排序

    合并排序最大优点是它时间复杂度为O(nlgn),这个是我们之前选择排序和插入排序所达不到。他还是一种稳定性排序,也就是相等元素序列相对位置排序前后不会发生变化。...设定两个指针,最初位置分别为两个已经排序序列起始位置 比较复制数组两个指针所指向元素,选择相对小元素放入到原始排序数组,并移动指针到下一位置 重复步骤3直到某一指针达到序列尾 将另一序列剩下所有元素直接复制到原始数组末尾...array, lo, mid, hi);//左右排好序列进行合并 } ... } 排序一个具有15个元素数组为例,其调用堆栈为: ?...并行化 分治算法通常比较容易进行并行化,浅谈并发与并行这篇文章已经展示了如何快速排序进行并行化(快速排序在下一篇文章中讲解),合并排序一样,因为我们均分左右两侧序列是独立,所以可以进行并行,...Java引用对象进行排序,Perl、C++、Python稳定性排序内部实现,都是使用合并排序

    38830

    算法:排序

    经过如此一趟排序,使得 个元素中值最大元素被安置序列第 个位置上; 此后,再前 个元素进行同样过程,使得该 个元素中值最大元素被安置第 然后再前 个元素重复上述过程,...这 说明选择排序法所进行元素之间比较次数与序列原始状态无关,同时可以确定算法时间复杂度为 由于我们进行交换元素时是不相邻元素之间进行,因此很有可能会改变相同元素前后位置,因此,选择排序法是一种非稳定性排序算法...对于具有n个元素序列,插入排序算法一共要进行n-1趟排序原始序列是按递增序列(升序)时,对应每个i进行一次元素之间比较,因而总比较次数最少,为 ,并不需要移动元素(记录),这是最好情况最...下面最低位优先法为例,讲解一下算法步骤 遍历数组元素,获取数组最大元素,并取得位数 个位元素为索引,对数字元素排序 合并数组 之后依次十位,百位,...直到最大元素最高位处为索引,进行排序...给定单个链表头 head ,使用 插入排序 链表进行排序,并返回 排序链表头 。

    1.1K20

    回溯算法:递增子序列

    数组整数范围是 [-100,100]。 给定数组可能包含重复数字,相等数字应该被视为递增一种情况。 思路 这个递增子序列比较像是取有序子集。而且本题也要求不能有相同递增子序列。...回溯算法:求子集问题(二)我们是通过排序,再加一个标记数组来达到去重目的。 而本题求自增子序列,是不能对原数组进行排序,排完序数组都是自增子序列了。 「所以不能使用之前去重逻辑!」...「本题只要同层重复使用元素,递增子序列就会重复」,而回溯算法:求子集问题(二)排序之后看相邻元素是否重复使用。...最后整体C++代码如下: C++代码 // 版本一 class Solution { private: vector> result; vector path...程序运行时候unordered_set 频繁insert,unordered_set需要做哈希映射(也就是把key通过hash function映射为唯一哈希)相对费时间,而且每次重新定义set

    1.2K20

    DP:子序列模型

    len[i]表示i位置为结尾所有子序列,最长递增子序列“长度” count[i]表示i位置为结尾所有子序列,最长递增子序列“个数” 2、状态转移方程 nums[j]<nums[i]时.... - 力扣(LeetCode) 算法原理: 预处理:由于题目要求是任意顺序组成数链,所以我们处理时候不仅要考虑前面,还要考虑后面,这样不利于我们动态规划表示,所以我们要先按照第一个元素进行排序...(比如[a,b] [c,d],aa,所以后面的不需要考虑到),我们要进行sort,C++,vector、pair默认比较逻辑都是按照字典序,恰好符合我们要求,所以我们可以直接调用...1、状态表示(经验+题目要求) dp[i]表示i位置为结尾所有数链序列,最长数长度。...,到时候时候还得判断b<a<c情况) (2)先固定倒数第二个数,再枚举最后一个数(可以等i位置填完再将i位置丢进哈希表,这样可以保证哈希表内元素下标必然是小,就可以不需要判断b<a<c

    9210

    9.1 C++ STL 排序、算数与集合

    C++ STL(Standard Template Library)是C++标准库一个重要组成部分,提供了丰富模板函数和容器,用于处理各种数据结构和算法。...sort函数将[first, last]范围内元素按照递增顺序排序,并将排序结果存储相同容器。sort函数执行前,需要保证所排序元素类型支持<运算符。...stable_sort函数将[first, last]范围内元素按照递增顺序排序,并保证相等元素相对顺序不变,将排序结果存储相同容器。...merge函数将已排序两个序列按照递增顺序合并成一个新有序序列,输出到result所指向迭代器位置,并将输出结果迭代器作为函数返回返回。...另外,为了实现更高效运行时间,C++ STL中提供了另一个函数模板来查找最大或最小

    21730

    四种简单排序算法

    swap()方法则用于交换数组两条记录,也交换数进行了打印(这里我注释掉了,但在测试时可以取消它们注释)。外层for循环控制变量i表示当前处理第i条记录。...我们来进行一个考察,按照这种排序方式,进行完第一趟循环之后,最小一定位于数组最顶部(下标为0);第二趟循环之后,次小记录位于数组第二(下标为1)位置;依次类推,第n-1趟循环之后,第n-1小记录位于数组第...swap(a[j], a[j-1]); } } } 3.选择排序 算法思想 选择排序冒泡排序一个改进,从上面冒泡排序输出可以看出,第一趟时,为了将最小13由数组末尾冒泡数组下标为...第i趟时,搜索数组n-i+1个记录,寻找最小记录(对于整个数组来说则是第i小),然后放在数组i-1位置(注意数组0起始)。可以看出,选择排序显著减少了交换次数。...这里要注意是分组记录在原数组位置第2个分组{14,20}来说,它下标是(1,5),所以这两个记录在原数组下标分别为a[1]=14;a[5]=20。

    61220

    9.1 C++ STL 排序、算数与集合

    C++ STL(Standard Template Library)是C++标准库一个重要组成部分,提供了丰富模板函数和容器,用于处理各种数据结构和算法。...sort函数将[first, last]范围内元素按照递增顺序排序,并将排序结果存储相同容器。sort函数执行前,需要保证所排序元素类型支持<运算符。...stable_sort函数将[first, last]范围内元素按照递增顺序排序,并保证相等元素相对顺序不变,将排序结果存储相同容器。...merge函数将已排序两个序列按照递增顺序合并成一个新有序序列,输出到result所指向迭代器位置,并将输出结果迭代器作为函数返回返回。...另外,为了实现更高效运行时间,C++ STL中提供了另一个函数模板来查找最大或最小

    18320

    最高频元素频数(二分查找)

    题目 元素 频数 是该元素一个数组中出现次数。 给你一个整数数组 nums 和一个整数 k 。 一步操作,你可以选择 nums 一个下标,并将该下标对应元素增加 1 。...执行最多 k 次操作,返回数组中最高频元素 最大可能频数 。...4 是数组中最高频元素,频数是 2 。 - 第二个元素执行 4 次递增操作,此时 nums = [1,8,8,13] 。 8 是数组中最高频元素,频数是 2 。...解题 对数字进行排序(只有小数能通过操作变成大数),并求前缀和 二分求解最大频次 每次二分时候,遍历一次前缀和数组位置为最大频数数字,能不能满足要求?...ms 84 MB C++ ---- 我CSDN博客地址 https://michael.blog.csdn.net/ 长按或扫码关注我公众号(Michael阿明),一起加油、一起学习进步!

    42620

    寻找旋转排序数组最小

    描述: 假设按照升序排序数组预先未知某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小元素。..., 比较次数 o(n) 执行用时: 28 ms, Find Minimum in Rotated Sorted ArrayC++提交击败了2.89% 用户 第二次尝试:减少比较次数 一个数组进行折半拆分...执行用时: 4 ms, Find Minimum in Rotated Sorted ArrayC++提交击败了98.16% 用户 3. c++ /** Time complexity...寻找旋转排序数组最小 假设按照升序排序数组预先未知某个点上进行了旋转。 请找出其中最小元素。期望:请找出其中最小元素 拦路虎: 1....如果是完全升序 第一数字就是 , 旋转数值是升序(相邻元素都是递增), 根本不知道抄那个方向移动?炸锅了。 肯定没有那么容易赛。 2.

    70900

    看图学NumPy:掌握n维数组基础知识点,看这一篇就够了

    但它们都是所谓view,也就是不存储原始数据。并且如果原始数组在被索引后进行更改,则不会反映原始数组改变。...NumPy向量运算符已达到C++级别,避免了Python慢循环。 NumPy允许像普通数字一样操作整个数组(加减乘除、整除、幂): ?...和一维数组一样,上图view表示,切片数组实际上并未进行任何复制。修改数组,更改也将反映在切片中。 axis参数 许多操作(例如求和),我们需要告诉NumPy是否要跨行或跨列进行操作。...这里-1参数表示reshape自动计算第二个维度上数组长度,None方括号充当np.newaxis快捷方式,该快捷方式指定位置添加了一个空axis。...不过NumPy具有多个函数,允许按列进行排序: 1、按第一列对数组排序:a[a[:,0].argsort()] ? argsort排序,此处返回原始数组索引数组

    6K20

    「数据结构与算法Javascript描述」十大排序算法

    最后,第二个和第三个元素还会再次互换,得到最终顺序: 「A B D E H」 下图演示了如何一个大数字数据集合进行冒泡排序图中,我们分析了插入数组两个特定:2 和 72。...然而,实际情况,归并排序还有一些问题,当我们用这个算法一个很大数据集进行排序时,我们需要相当 大空间来合并存储两个子数组。...接着,算法划分数组(较主元小组成数组,以及较主元大组成数组)重复之前两个步骤,直至数组已完全排序。...算法步骤如下: 找出待排序数组中最大和最小元素 统计数组每个为i元素出现次数,存入数组C第i项 所有的计数累加(从C第一个元素开始,每一项和前一项相加) 反向填充目标数组:将每个元素...「算法描述」 取得数组最大数,并取得位数; arr为原始数组,从最低位开始取每个位组成radix数组radix进行计数排序(利用计数排序适用于小范围数特点) 「基数排序动图演示」 img

    96920

    排序算法 | 快速排序(含C++Python代码实现)

    导言 排序算法,就是使得序列按照一定要求排列方法。排序算法有很多,本文将介绍面试中常常被问到经典排序算法:快速排序,并分别利用C++和Python进行实现。...之前CVer推送了 排序算法 | 冒泡排序(含C++/Python代码实现),一些同学反映太简单了,想知道其它复杂排序算法介绍,如Shell排序和桶排序等。...,rpn},这样操作就称为排序。 简单来说,排序就是使输入序列变成符合一定规则(关键字)有序序列(非递减或非递增)。大多数遇到排序问题都是按数据元素大小规则进行排序问题。...如果排序ri仍领先于rj,则称所用排序方法是稳定; 反之,若可能使得排序序列rj领先于ri,则称所用排序方法是不稳定。...,(从左往右)然后和最左边开始比较,如果 pivot,那么就交换位置 36 while (i < j &&

    80100
    领券