数组的运用、排序
问题描述
在别人的博客上看到起面试经历中的面试题,自己也想实现下,说实话,这道题以前做数据结构的课程设计是做过的,而且这样的题,当时还问了同学的,可是没有自己想,没有上心,到现在也就影响不太深刻了,当时可能也没有很好地理解数组的使用。
给定一个整型数组,输入一个数字N时,要输出数组中第N大的数,并把它原来的下标输出来,要求用C语言实现,时间复杂度要求最小,20分钟时间。
代码
View Code
总结
加深印象,不过还没有实现其时间复杂度最小的要求,排序的算法现在还不是很熟悉,不过会看到的,到时再来改进一下这个题的解法。
最后作者还说 面试官问了不用辅助空间怎么实现。 也就是说不允许定义一个存放下标的数组。
刚一出Intel大门,突然想到了解决不用辅助空间的方法,唉~反应太迟钝了,第一次遍历下数组,知道了数组最大元素。INT类型的是4个字节,一般整数不会完全用完,可以用4个字节的前2个字节存放它们的下标(前提是这个数小于2^16),这样每次冒泡时,比较它们的低16位就行了,同时下标也跟着元素的交换走了。
这个我不是很懂,怎样让前两个字节存放它们的下标,然后再比较低16位。
今天懂了怎么让前两个字节存放它们的下标,再比较低16位的做法了,代码如下:
View Code