学完了快速排序算法,感觉挺容易的,所以趁着有点时间就写了个实现程序。
采用了界面和实现分离的原则
//QSort.h
// Interface of the Quick Sort#define NUM 2000 //设置最多个数为1999个class QSort{ int data[NUM]; public: int m_DataNum; public: void getData(); int doPartition(int low,int high); //返回轴的位置 void QuickSort(int low,int high); void Output();};
//QSort.cpp
#include "QSort.h"#include "iostream.h"#include "fstream.h"
void QSort::getData(){ int data_num=0; ifstream infile; infile.open("qsort_data.txt"); if (!infile) { cout<<"' qsort_data.txt 'File not exists!"<<endl; } else { while (!infile.eof()) { data_num++; infile>>data[data_num]; } m_DataNum=data_num; }
}int QSort::doPartition(int low,int high){ int pivot; data[0]=data[low]; pivot=data[0]; while (low<high) { while ((low<high)&&(pivot<=data[high])) high--; //显然如果改为while ((low<high)&&(pivot>=data[high])) high--; 则是递减(下面也要改) data[low]=data[high]; while ((low<high)&&(pivot>=data[low])) low++; //while ((low<high)&&(pivot<=data[low])) low++; data[high]=data[low]; } data[low]=pivot; return low;}void QSort::QuickSort(int low,int high){ int pivot_pos; if (low<high) //注意这个条件 { pivot_pos=doPartition(low,high); QuickSort(low,pivot_pos-1); QuickSort(pivot_pos+1,high); }}void QSort::Output(){ for (int i=1;i<=m_DataNum;i++) cout<<data[i]<<" "; cout<<endl;}void main(){ QSort q; q.getData(); q.QuickSort(1,q.m_DataNum); q.Output();}
跟书上的数据组织方式有点不同,简化了的。。。