长度为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],直到所有元素的位置和值都匹配

    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 = ;
//move 0 to num[0]
for(;i<size;i++){
if(num[i] == ){
swap(num, i, );
}
}
i = ;
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, , tarpos); // num[tarpos] = 0
swap(num, tarpos,i); // num[i] = 0
swap(num, , i); // num[0] = 0
}
}
} int main(){
int input[] = {,,,};
sort(input, );
int t = ;
for(;t<;t++)
printf("%d->",input[t]);
printf("n");
}

原文地址:http://blog.chinaunix.net/uid-26456800-id-3512430.html

[转载]排序:长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的swap的更多相关文章

  1. 长度为N的数组乱序存放着0带N-1.现在只能进行0与其他数的swap操作,请设计并实现排序,必须通过交换实现排序。

    void sort(int* arr, int len) { if (!arr) { return; } for (int i = 1; i < len; ++i) { while (arr[0 ...

  2. JavaScript中实现最高效的数组乱序方法

    数组乱序的意思是,把数组内的所有元素排列顺序打乱. 常用的办法是给数组原生的sort方法传入一个函数,此函数随机返回1或-1,达到随机排列数组元素的目的. 复制代码代码如下: arr.sort(fun ...

  3. js数组乱序输出 数组乱序排列

    网上看的数组乱序输出,要么不合实际,要么代码繁琐.自己试了下,希望能给大家带来帮助. 重要思想也是Math.random*arr.length随机下标,然后删除取到的元素,继续随机下标. //将数组乱 ...

  4. js之数组乱序

    这是最近面试遇到的,不过忘记了,之前也有印象刷到过这道题,就再次记录一下加深印象吧,听到最多的答案是利用sort方法,不过也有说这种方法不好,利用了快排和插入排序,那就整理下吧 <!DOCTYP ...

  5. 高频重要前端API手写整理(call,apply,bind,instanceof,flat,filter,new,防抖,节流,深浅拷贝,数组乱序,数组去重,继承, lazyman,jsonp的实现,函数的柯里化 )

    Function.prototype.call = function(context,...args){ var context = context || window; context.fn = t ...

  6. java将一数组乱序排列

    JAVA的Collections类中shuffle方法模拟了“洗牌”动作可以对list列表进行随机排序.如果一定要自己写,算法也很简单:假设数组array长度为n.用标准随机函数rand(n)生成[0 ...

  7. JavaScript tips —— 谈谈数组乱序

    前言 先看一个段代码 function randArr (arr) { return arr.sort(() => { return (Math.random() - 0.5); }); } 目 ...

  8. c#几种随机数组和数组乱序

    相关资料MSDN:RNGCryptoServiceProvider   Random   Guid private static RNGCryptoServiceProvider rngCsp = n ...

  9. c#数组乱序,打乱数组

    按照random随机给出的index,进行两两交换,当然也存在与上一次一样的数组结果.官方还有一种ICompare的比较器,只是打乱顺序这个没用起来,不知道该怎么搞,╮(╯_╰)╭ public st ...

随机推荐

  1. 第三周课程总结&实验报告

    课程总结 在这周对Java进行了更深层次的学习,Java的学习也变得越来越困难而有趣,加入了一些新的构造新的方法,还学习了一些简化代码的方式. 面向对象的基本概念 对于面向对象的程序设计有三个主要特征 ...

  2. redhat7.2配置yum源

      版权声明:声明:本博客欢迎转发,但请保留原作者信息!本站文章皆基于公开来源信息,仅代表作者个人观点 https://blog.csdn.net/wylfengyujiancheng/article ...

  3. spark 笔记 15: ShuffleManager,shuffle map两端的stage/task的桥梁

    无论是Hadoop还是spark,shuffle操作都是决定其性能的重要因素.在不能减少shuffle的情况下,使用一个好的shuffle管理器也是优化性能的重要手段. ShuffleManager的 ...

  4. Unknown class xxx in Interface Builder file. / NSUnknownKeyException

    Error: 2019-11-24 22:16:01.047997+0800 SingleViewDemo[22576:34699748] Unknown class FeedbackCell in ...

  5. debian安装图形界面,使用mstsc远程登录

    环境:debian 10.2 更新软件列表 apt-get update 安装最基本的gnome图形相关软件 apt install x-window-system-core gnome-core 安 ...

  6. 如何将浏览器上的JS文件屏蔽

    在学习自定验证时,需要在页面上进行调试运行结果,这时的JS会影响运行结果的显示,所以我们会将JS代码屏蔽掉,那么我们该如何做呢? 第一步: 在浏览器地址栏输入about:config  点击“我保证会 ...

  7. Spring配置多个数据源,并实现数据源的动态切换转载)

    1.首先在config.properties文件中配置两个数据库连接的基本数据.这个省略了 2.在spring配置文件中配置这两个数据源: 数据源1 <!-- initialSize初始化时建立 ...

  8. BOSCH汽车工程手册————驾驶员辅助系统

    根据交通事故统计得出平均每分钟有一人死于交通事故 而辅助驾驶系统能够为驾驶员洞察了解汽车周围情况,识别危险的行驶状况. 提早为驾驶员告诉危险信息,可减少60%汽车驶上主路事故和1/3汽车前碰事故. 有 ...

  9. idea中在编码时候经常用到的快捷键

    Ctrl+z 撤销 Ctrl+shift+z 重做 复制 粘贴 剪贴 其中idea可以在光标的当前行不用选中代码,只用ctrl+c,ctrl+v,ctrl+x 就可以复制,粘贴,剪贴 光标的那一行的代 ...

  10. 【Ruby on Rails 学习六】Ruby 类 的入门

    1.什么是类 2.类与实例的区别 3.自定义简单的类 生活中的垃圾分类,是集合上的概念 比如数学上的   1  a  2  b  c  4  5分类为数字1 2 4 5 ,字母  a  b  c ir ...