对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间。原数组为:A,B,C,D,E, 现给定新的位置为3, 0, 1, 4, 2那么排序为D,A,B,E,C
来源:互联网 发布:php extension dir 编辑:程序博客网 时间:2024/05/17 08:21
题目描述:对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间。例如:原数组为:A, B, C, D, E, 现给定新的位置为:3, 0, 1, 4, 2,那么排序后为D, A, B, E, C。问题分析:为什么分类为数据结构,因为其实这个题就是快排的挖坑法的变形。解决思路:保存第一个位置的数据后,把第一个位置设为坑,如果给定的新位置与现在index所在位置不相等,说明数据不在我们期待的位置,则把下标为新位置的数据放到index的位置。
void SwapSort(int*pArr, int*pPos, size_t n){ int key = pArr[0];//默认情况下第一个元素设置为坑 static int index = 0; while (--n)//注意不是n-- { cout << index <<" "; if (index != pPos[index]) { pArr[index] = pArr[pPos[index]]; index = pPos[index];//标记新的坑 } } pArr[index] = key; //把最开始坑里的数据填到最后一个坑的位置 }int main(){ int arr[] = { 'A', 'B', 'C', 'D', 'E' }; int pos[] = { 3, 0, 1, 4, 2 }; SwapSort(arr, pos, sizeof(arr) / sizeof(arr[0])); for (size_t i = 0; i < 5; i++) cout << (char)arr[i] << " "; system("pause"); return 0;}
阅读全文
1 0
- 对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间。原数组为:A,B,C,D,E, 现给定新的位置为3, 0, 1, 4, 2那么排序为D,A,B,E,C
- 【数据结构】对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间
- 对一个数组,按照给定的下标进行排序,仅使用两两交换的方式
- 给出一个百分制的成绩,要求输出等级'A',B'','C','D','E'。90分以上为'A'.80~89为'B',70~79为‘C’,
- 给定表达式为:a*b+(c-d)/e 建立表达式二叉树
- 两长度相等的数组根据下标组成新数组['a','b','c']['A','B','C'] new ['aA','bB','cC']
- 封装一个cout方法,能实现如此调用:cout(a)(b)(c)(d)(e)… 并且返回的值为参数连剩的结果,即a*b*c*d*e*…。如cout(1)(3)(7) 得到21
- leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
- 在已排序的数组中寻找和是给定值的两项,要求时间复杂度为O(n)
- 使用malloc分别分配2KB的空间,然后用realloc调整为6KB、1MB、3MB、10MB空间,并且将这五块内存分别用“A”、“B”、“C”、“D”、“E”填充
- 给出入栈序列为A,B,C,D,E,可能的出栈序列
- 冒泡排序 给定的字符串为:A,2.d?3!e4r87we79... 按类别排序
- 对学生成绩进行评定:小于60为"E",60~69为"D",70~79为"C",80~89为"b",90以上为"A"
- 给定一数组,输出满足2a=b(a,b代表数组中的数)的数对,要求时间复杂度尽量低。
- 【美团】有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。 给定数组A及它的大小n,请返回最大差值
- 给定两个排序的数组,其中A有足够空间容纳B,实现一个方法将B容纳进A并排序
- 利用线程的知识,要求打印的结果为:1 2 A 3 4 B 5 6 C 7 8 D 9 10 11 12 ... 52 E F G H I J K ... X Y Z
- 给定一个无序单链表头节点head,实现单链表的选择排序,要求:额外空间复杂度为O(1)
- java对象和类
- MyBatis 二级缓存
- c++之引用和指针的区别和联系
- JDBC java对MySQL数据库进行查询操作,并把查询的结果输出
- mybatis 源码学习之getMapper过程分析
- 对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间。原数组为:A,B,C,D,E, 现给定新的位置为3, 0, 1, 4, 2那么排序为D,A,B,E,C
- 23种设计模式之——建造者模式
- 磁盘调度算法
- C#中的泛型
- maven解决jar包版本冲突
- MyBatis二级缓存 完成版
- spark中的online均值/方差统计
- 网络层模型
- 简单的Java程序