每天一个小程序(16)——交换排序之快速排序2
2014-04-01 12:36
218 查看
快速排序,同样的是用递归的算法,不过在Partition函数中用另一种方法,设立两个变量low和high,一个为第一个元素位置,一个为最后一个元素位置,low和high保存在指针量i和j中,将R[low]保存到R[0]中,从R[high]开始向左检查(j--),发现比R[0]小的元素,则将R[high]放到R[low]中,再从low向右检查(i++),发现比R[0]大的元素,则将R[low]放到R[high]中,不断循环,知道两个指针量i<j时,本趟循环结束。
#include <stdio.h> struct datatype1 { int key; }; typedef int datatype; void Display(datatype A[]) { for(int i = 1; i < 20; i++) { printf("%d ",A[i]); } } int Partition(datatype R[], int low, int high) { int i,j; i = low; j = high; R[0] = R[low]; while(i < j) { while((R[j] >= R[0]) && (i < j)) //向左检查 j--; if(i < j)//若i<j,则说明有小于R[0]的,则交换 { R[i] = R[j]; i++; } while((R[i] <= R[0]) && (i < j))//向右检查 i++; if(i < j)//若i<j,则说明有大于R[0]的,则交换 { R[j] = R[i]; j--; } R[i] = R[0]; } return i; } void Quick_Sort(datatype R[], int low, int high) { int i; if(low < high) { i = Partition(R, low, high); Quick_Sort(R, low, i - 1); Quick_Sort(R, i + 1, high); } } void main() { datatype A[] = {0,4,7,1,13,0,322,92,35,19,3,78,-32,45,77,43,933,8,49,11}; Quick_Sort(A,0,19); Display(A); }
相关文章推荐
- 每天一个C++小程序(十五)--快速排序
- 每天一个c++小程序(1):快速排序
- 每天一个小程序(12)——交换排序之冒泡排序
- 每天一个小程序(15)——交换排序之快速排序
- 每天一个小程序——选择排序时的一个小问题!
- 一个快速排序 和 直接插入排序 的简单 c程序
- 每天一个小程序(10)——直接插入排序
- 如何写出一个较好的快速排序程序
- 使用JavaScript完成一个对字符串数组进行排序的小程序
- 3. 编写一个C程序,实现对10个整数进行升序排序输出。
- ARM汇编程序---1-100累加和一个简单排序
- 每天一个Linux命令(16):which
- Python 练习册,每天一个小程序-解答
- 快速排序的一个Java实现
- 每天一个 Linux 命令(16):which whereis locate命令
- Python 练习册,每天一个小程序----------001使用 Python 如何生成多位随机数
- 014写程序将一个栈按升序排序,对这个栈是如何实现的,你不应该做任何特殊的假设(keep it up)
- C# 小程序 快速排序
- 每天一个小程序(2)——带头结点的链表的创建以及插入和删除
- 面试题,小程序,在一个排序完毕的数组中,按顺序插入一个数