常用排序算法的实现和复杂度的分析
2013-10-18 12:42
197 查看
在排序算法的面试中,面试官喜欢考察的就是插入排序、冒泡排序、归并排序、快速排序这四种排序算法,其中快速排序一般会要求现场写代码,这个要注意一下。
这些算法的考察点就是要对算法的特点烂熟于胸,熟悉它们各自的空间复杂度、平均时间复杂度、最差时间复杂度。别的不多说,先来写一个快速排序的代码实现:
先把pivot轴元素选定出来,然后放到最后。设置一个small指针,这个指针表示两部分数组的边界,small左边的数据都是小于pivot元素,small右边到当前指针index之间的数据都大于pivot。这样遍历一遍,然后把pivot放到指定的位置。
首先写一个选pivot轴的函数,这个轴是一个随机的选择:
这个函数在[min,max]之间随机产生一个数字,然后把这个数组返回。
然后看一下划分函数的写法:
QuickSort算法就是基于划分的,利用分治算法,先把其中的一个元素归位,然后在分别处理这个元素的左右两边的数组元素。
这些算法的考察点就是要对算法的特点烂熟于胸,熟悉它们各自的空间复杂度、平均时间复杂度、最差时间复杂度。别的不多说,先来写一个快速排序的代码实现:
快速排序代码实现
快速排序的第一步就是划分,然后才是递归的调用,这里还是按照一般算法的设计步骤,先说算法的设计方案。先把pivot轴元素选定出来,然后放到最后。设置一个small指针,这个指针表示两部分数组的边界,small左边的数据都是小于pivot元素,small右边到当前指针index之间的数据都大于pivot。这样遍历一遍,然后把pivot放到指定的位置。
首先写一个选pivot轴的函数,这个轴是一个随机的选择:
int RandomInRange(int min, int max) { int random = rand() % (max - min + 1) + min; return random; }
这个函数在[min,max]之间随机产生一个数字,然后把这个数组返回。
然后看一下划分函数的写法:
int Partition(int data[], int start, int end) { if(data == NULL) return -1; int index = RandomInRange(start, end); int small = start - 1; swap(data[index], data[end]); for(index = start; index < end; index++) { if(data[index] < data[end]) { ++small; if(small != index) { swap(data[small], data[index]); }//if }//if }//for ++small; swap(data[small], data[end]); return small; }//Partition()
QuickSort算法就是基于划分的,利用分治算法,先把其中的一个元素归位,然后在分别处理这个元素的左右两边的数组元素。
void QuickSort(int data[], int start, int end) { if(start == end) return; int index = Partition(data, start, end); if(index > start) QuickSort(data, start, index - 1); if(index < end) QuickSort(data, index + 1, end); }
相关文章推荐
- 常用排序算法的实现和分析
- 快速排序原理、复杂度分析及C语言实现
- 两个栈实现队列和两个队列实现栈-Python实现-复杂度分析
- 链表的java实现与时间和空间复杂度分析
- 八大常用排序算法详细分析 包括复杂度,原理和实现
- 排序算法的C语言实现以及各个算法的时间复杂度和空间复杂度分析(冒泡排序)
- 常用排序算法的python实现和性能分析
- 常用排序算法的python实现和性能分析
- 常用排序算法的分析与实现
- 常用排序算法分析与实现(一)(Java版)
- 常用排序算法分析(C++实现)
- 【C语言】求取第n个斐波那契数的时间复杂度、空间复杂度分析,用三种方式实现(普通递归,循环,优化递归)
- 第四周上机实践—项目3(2)—单链表的应用 实现算法并分析复杂度
- 常用排序算法分析与实现(一)(Java版)
- JAVA 实现各种排序算法和复杂度分析1
- 常用排序算法分析实现(C语言)
- JAVA 实现各种排序算法和复杂度分析
- JAVA 实现各种排序算法和复杂度分析2
- JAVA 实现各种排序算法和复杂度分析
- 八大常用排序算法详细分析 包括复杂度,原理和实现