数据结构笔记-快速排序简单实现
2012-11-26 23:50
591 查看
手动写了下快速排序算法的简单实现,没有考虑当子数组小于阀值(例如nLast-nFirst < 7)时进行选择排序等优化。
#include "stdafx.h" #include <iostream> #include <time.h> void Swap( int* pFirst, int* pSecond ) { int nTemp = *pFirst; *pFirst = *pSecond; *pSecond = nTemp; } int Partition( int* pArray, int nFirst, int nLast ) { // Random of three point int nMid = (nFirst + nLast)/2; if( pArray[nFirst] > pArray[nLast] ) { Swap( &pArray[nFirst], &pArray[nLast] ); } if( pArray[nMid] > pArray[nLast] ) { Swap( &pArray[nMid], &pArray[nLast] ); } if( pArray[nMid] > pArray[nFirst] ) { Swap( &pArray[nMid], &pArray[nFirst] ); } int nDivValue = pArray[nFirst]; while( nFirst < nLast ) { while( nFirst < nLast && nDivValue < pArray[nLast] ) { nLast--; } if( nFirst < nLast ) { pArray[nFirst] = pArray[nLast]; nFirst++; } while( nFirst < nLast && pArray[nFirst] < nDivValue ) { nFirst++; } if( nFirst < nLast) { pArray[nLast] = pArray[nFirst]; nLast--; } } pArray[nFirst] = nDivValue; return nFirst; } void QuickSort( int* pArray, int nFirst, int nLast ) { if( nFirst < nLast ) { int nDivision = Partition( pArray, nFirst, nLast ); QuickSort( pArray, nFirst, nDivision - 1 ); QuickSort( pArray, nDivision + 1, nLast ); } } int _tmain(int argc, _TCHAR* argv[]) { int nDataArray[50]; srand((unsigned)time(0)); for( int i = 0; i < 50; i++ ) { nDataArray[i] = rand()%50; } printf("Source Array: \n"); for( int i = 0; i < 50; i++ ) { printf("%d, ", nDataArray[i] ); if( i%10 == 9 ) { printf("\n"); } } QuickSort( nDataArray, 0, 49 ); printf("Sorted Array: \n"); for( int i = 0; i < 50; i++ ) { printf("%d, ", nDataArray[i] ); if( i%10 == 9 ) { printf("\n"); } } return 0; }
相关文章推荐
- 数据结构笔记--栈的总结及java数组实现简单栈结构
- Java实现一部分简单的排序算法和数据结构(学习笔记20171022002)
- (二)数据结构学习笔记 简单堆栈,STL中堆栈的实现
- 【数据结构&&算法系列】快速排序简单介绍及实现
- 数据结构学习笔记8——简单二叉树的实现与遍历
- Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用
- 数据结构学习笔记9——区分叶结点与分支结点的二叉树实现方案一
- 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
- iOS应用开发中实现页面跳转的简单方法笔记
- 总结大学一些常见数据结构简单实现(c&c++语言)
- 数据结构之队列的定义与简单实现
- Redis源码阅读笔记(1)——简单动态字符串sds实现原理
- 【C++数据结构学习笔记---栈】用链表实现栈
- Android笔记——Socket通信实现简单聊天室
- 【2015/6/9】快速排序的java简单实现
- 数据结构编程笔记八:第三章 栈和队列 顺序栈和进位制程序的实现
- 每天一个数据结构——三种简单排序算法及Java实现
- 数据结构学习三(一个简单的队列实现)
- Android笔记-4-实现登陆页面并跳转和简单的注册页面
- 【龙书笔记】用Python实现一个简单数学表达式从中缀到后缀语法的翻译器(采用递归下降分析法)