快速排序演示
2015-07-06 19:21
375 查看
#include<iostream> #define CUTOFF 10 // 定义快速排序的数组规模下届 // 交换两个整数 void swap(int *fir, int *sec) { int temp = 0; temp = *fir; *fir = *sec; *sec = temp; } // 插入排序算法 void InsertionSort(int A[], int n ) { int j, p; int tmp; for(p = 1; p < n; p++ ) { tmp = A[ p ]; for( j = p; j > 0 && A[ j - 1 ] > tmp; j-- ) A[ j ] = A[ j - 1 ]; A[ j ] = tmp; } } // 三数中值分割 int Median3(int A[], int left, int right) { // 计算中间位置 int center = (left + right) / 2; if( A[ left ] > A[ center ] ) swap( &A[ left ], &A[ center ] ); if( A[ left ] > A[ right ] ) swap( &A[ left ], &A[ right ] ); if( A[ center ] > A[ right ] ) swap( &A[ center ], &A[ right ] ); /* 不变等式: A[left] <= A[center] <= A[right] */ swap( &A[ center ], &A[ right - 1 ] ); // 隐藏枢纽元 return A[right - 1]; } // 快速排序算法 void Qsort(int A[], int left, int right) { int i, j; // 枢纽元 int pivot; if( left + CUTOFF <= right ) { pivot = Median3( A, left, right ); // 初始化i,j的位置 i = left; j = right - 1; for( ; ; ) { while( A[ ++i ] < pivot ) {} while( A[ --j ] > pivot ) {} if( i < j ) swap( &A[ i ], &A[ j ]); else break; } // 将枢纽元与i所指向的元素交换 swap( &A[ i ], &A[ right - 1 ]); // 以i为分界线,分别对左右两端递归的进行快速排序 Qsort( A, left, i - 1); Qsort( A, i + 1, right); } else // 在该数组上做一次插入排序 InsertionSort(A + left, right - left + 1); } // 打印数组 void printArray(int A[], int len) { int length = len; int index; for(index = 0; index <= len - 1; index++) { printf("%d ", A[index]); } } int main(){ // 函数声明 void swap(int *fir, int *sec); void InsertionSort(int A[], int n ); int Median3(int A[], int left, int right); void Qsort(int A[], int left, int right); void printArray(int A[], int len); int A[15] = {2,5,1,7,6,19,30,9,4,8,21,11,18,22,47}; printf("快速排序之前: \n"); printArray(A, 15); Qsort(A, 0, 14); printf("\n"); printf("快速排序之后: \n"); printArray(A, 15); return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- 快速排序
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#快速排序算法实例分析
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息