排序算法-(随机)快速排序(递归)
2013-03-12 16:20
253 查看
1.快速排序
快速排序的基本思路属于分治算法的一种,通过选择数组中的某一个元素作为分界点(key),大于key的元素放置在数组右边,小于key的元素放置在数组的左边,然后通过递归调用该过程来实现排序算法。
代码如下:
代码中主要有两个函数Partition(int *A, int p, int q)和QuickSort(int *A, int p, int q),
其中,Partition(int *A, int p, int q)中,指针A指向待排序的数组,p为待排序数组的起点,q为终点,函数中选用数组的起点A[p]作为分界点(key),结果该函数调用后,数组A中大于key的元素在key的右边,小于key的元素在key的左边。
QuickSort(int *A, int p , int q)函数为快速排序的实现函数,通过递归调用每次对数组进行分界Partition操作,最终实现对数组的排序。
2.随机快速排序
在快速排序中每次对数组的分界操作Partition都是以数组的其实点作为分界点(key),这样就带来了一个问题——当待排序数组是一个已排好序的数组时,快速排序的执行时间是O(n平方),在执行 时间上比较耗时,于是就有了随机快速排序的思想。
在随机快速排序中,每次对数组的分界操作Partition都是在数组中随机寻找一个元素作为分界点(key),这样就避免了上诉问题,随机排序的平均在执行时间为O(n*lg(n))。比上面的O(n平方)有很大的提高。
快速排序的基本思路属于分治算法的一种,通过选择数组中的某一个元素作为分界点(key),大于key的元素放置在数组右边,小于key的元素放置在数组的左边,然后通过递归调用该过程来实现排序算法。
代码如下:
int Partition(int *A, int p, int q){ int i = p; int key = A[i]; for(int j = p+1; j <= q, j++){ if(A[j]<key){ i++; int temp = A[i]; A[i] = A[j]; A[j] = temp; } } int temp = A[i]; A[i] = A[P]; A[p] = temp; return i; } void QuickSort(int *A, int p, int q){ if(p<q){ int r = Partition(A, p, q); QuickSort(A, p, r-1); QuickSort(A, r+1, q); }else{ return ; } }
代码中主要有两个函数Partition(int *A, int p, int q)和QuickSort(int *A, int p, int q),
其中,Partition(int *A, int p, int q)中,指针A指向待排序的数组,p为待排序数组的起点,q为终点,函数中选用数组的起点A[p]作为分界点(key),结果该函数调用后,数组A中大于key的元素在key的右边,小于key的元素在key的左边。
QuickSort(int *A, int p , int q)函数为快速排序的实现函数,通过递归调用每次对数组进行分界Partition操作,最终实现对数组的排序。
2.随机快速排序
在快速排序中每次对数组的分界操作Partition都是以数组的其实点作为分界点(key),这样就带来了一个问题——当待排序数组是一个已排好序的数组时,快速排序的执行时间是O(n平方),在执行 时间上比较耗时,于是就有了随机快速排序的思想。
在随机快速排序中,每次对数组的分界操作Partition都是在数组中随机寻找一个元素作为分界点(key),这样就避免了上诉问题,随机排序的平均在执行时间为O(n*lg(n))。比上面的O(n平方)有很大的提高。
相关文章推荐
- 常见的五类排序算法图解和实现(交换类:冒泡排序,递归的快速排序)
- C#实现(递归和非递归)快速排序和简单排序等一系列排序算法
- 分治法在排序算法中的应用(JAVA)--快速排序(Lomuto划分、Hoare划分、随机化快排)
- 常见的五类排序算法图解和实现(交换类:冒泡排序,递归的快速排序)
- 排序算法C++11实现——冒泡、选择、插入、希尔、堆、合并、快速排序(非递归)
- C#实现(递归和非递归)快速排序和简单排序等一系列排序算法
- 排序算法 - 快速排序(递归实现)
- 常见的五类排序算法图解和实现(交换类:冒泡排序,递归的快速排序)
- 算法之冒泡、选择、递归、随机、循环
- 排序算法——快速排序
- 排序算法_快速排序
- 漫谈经典排序算法:三、冒泡排序 && 快速排序
- JavaScript 排序算法——快速排序
- 排序算法之快速排序
- 排序算法-交换排序之快速排序
- 排序算法之快速排序详解
- 排序算法之-快速排序
- 排序算法——快速排序(快排)
- 排序算法——快速排序
- 记录自已学习之排序算法(快速排序)