长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap 请设计并实现排序
来源:互联网 发布:阿里云服务器伪静态 编辑:程序博客网 时间:2024/06/05 06:34
长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap 请设计并实现排序。
google笔试小题。题目来源:http://wenku.baidu.com/view/5aa818dda58da0116c17498b.html
休闲小题。
2个key
一个是只能与0 swap,另一个是数组的下标和值是一一对应的。
第二个容易被忽略。所以读到一个元素时,如果值和下标不等,那么可以直接把这个元素的值放到正确位置上去,目标位置的值挪回来。当然这个过程要借助元素0来完成。
假设输入是 2,0,3,1
step 1
遍历数组,找出值为0的元素,和num[0]交换
0 2 3 1
step 2
如果num[1]下标和值匹配,考虑下一个,否则
尝试把num[1]的值借助num[0]放入正确的位置
3 2 0 1 --》 3 0 2 1 --》 0 3 2 1
step 3
重复 step 2,直到 num[1]正确被放置了 1
step 4
num[1]处理完,step2处理下一个元素num[2],直到所有元素的位置和值都匹配
google笔试小题。题目来源:http://wenku.baidu.com/view/5aa818dda58da0116c17498b.html
休闲小题。
2个key
一个是只能与0 swap,另一个是数组的下标和值是一一对应的。
第二个容易被忽略。所以读到一个元素时,如果值和下标不等,那么可以直接把这个元素的值放到正确位置上去,目标位置的值挪回来。当然这个过程要借助元素0来完成。
假设输入是 2,0,3,1
step 1
遍历数组,找出值为0的元素,和num[0]交换
0 2 3 1
step 2
如果num[1]下标和值匹配,考虑下一个,否则
尝试把num[1]的值借助num[0]放入正确的位置
3 2 0 1 --》 3 0 2 1 --》 0 3 2 1
step 3
重复 step 2,直到 num[1]正确被放置了 1
step 4
num[1]处理完,step2处理下一个元素num[2],直到所有元素的位置和值都匹配
- void swap(int* num, int a, int b){
- if(a == b) return;
- int tmp = num[a];
- num[a] = num[b];
- num[b] = tmp;
- }
- void sort(int* num, int size){
- int i = 0;
- //move 0 to num[0]
- for(;i<size;i++){
- if(num[i] == 0){
- swap(num, i, 0);
- }
- }
- i = 1;
- while(i<size){
- //postion matched value
- if(num[i] == i){
- i++;
- }
- //postion mismatch value, then need to place value to the correct postition and continue
- else{
- int tarpos = num[i];
- swap(num, 0, tarpos); // num[tarpos] = 0
- swap(num, tarpos,i); // num[i] = 0
- swap(num, 0, i); // num[0] = 0
- }
- }
- }
- int main(){
- int input[] = {2,0,3,1};
- sort(input, 4);
- int t = 0;
- for(;t<4;t++)
- printf("%d->",input[t]);
- printf("n");
- }
0 0
- 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap,请设计并实现排序。
- 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap 请设计并实现排序
- google校招笔试题 2.2 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap,请设计并实现排序。
- 长度为N的数组乱序存放着0带N-1.现在只能进行0与其他数的swap操作,请设计并实现排序,必须通过交换实现排序。
- 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的交换.将数组中的元素按对应位置放置使得a[i]=i
- 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的交换.将数组中的元素按对应位置放置使得a[i]=i
- 2016魅族校招的一道笔试题,将一个长度为n的数组中存放的是未排序的0到n-1,要求只能将0和其他数swap,完成数组排序
- Java笔试题:只能进行0与其他数的swap操作的排序算法
- 算法导论2-1.4:给出两个长度为n的二进制数(当前存放在数组中),求和后放入长度为n+1的数组中
- 一个长度为N的数组中包含正数 负数 0,请实现一个函数找出和为0的最长子数列
- 实现一个排序算法,对0~n-1范围内的n个不重复的无序数组进行排序,时间复杂度为O(n),空间复杂度为O(1)。
- 有序数组长度为N 元素出现的长度为 大于等于 N 除 4 的最小的数
- 百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序
- 两数之和二 给定一个整形的数组,找出其中的两个数使其和为某个指定的值,并返回这两个数的下标(数组下标是从0开始)。假设数组元素的值各不相同,则要求时间复杂度O(n),n为数组的长度
- 有1,2,…,n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),一次只能交换两个数
- 数组中存放0到n中的缺少一个数的连续数,找出该缺少的数
- 题目四:给定一个数组,值可以为正、负和0,请返回累加和小于等于k的最长子数组长度。 时间复杂度:O(n)
- 列出长度为n的数组中,所有加和为m的数
- cocoapods 使用 一、安装篇
- msql数据库的导入导出
- java关键字
- B树
- STL学习笔记-map/multimap容器
- 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap 请设计并实现排序
- 静态代理模式
- 爬爬爬之路:C语言(十) 动态内存分配
- 排序算法之二分排序算法
- 揭开智能配置上网(微信Airkiss)的神秘面纱
- 记一次前端笔试
- 关于可穿戴设备的展望
- HTML5 使用浏览器内置数据库之 Web SQL
- 日经春秋 20151021