某个二维数组存放了一系列的字符串,试利用排序的一些算法(如插入、冒泡、快速排序等)对这些字符串按照字典顺序进行排序。
例如:二维数组的字符串如下:
char s[][20]={“while”,”if”,“else”,”do”,“for”,”switch”,“case”};
实现代码如下:
头文件模块
targetver.h
#pragma once // 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。 // 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将 // WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 #include <SDKDDKVer.h>
stdafx.h
// stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 // 特定于项目的包含文件 // #pragma once #include "targetver.h" #include <stdio.h> #include <tchar.h> // TODO: 在此处引用程序需要的其他头文件 #include<iostream> #include<fstream> #include<string> using namespace std; static const int MAX_N = 100; class CSortFunc { public: CSortFunc(string );//构造 void CGetInfo();//读文件信息 void CQuickSort(int, int);//快排 bool CFileOut();//输出 int size(); //数组最大下标 private: ifstream readfile; ofstream writefile; string filename; string str[MAX_N]; int count; };
C++文件模块
stdafx.cpp
// stdafx.cpp : 只包括标准包含文件的源文件 // Sortfunction.pch 将作为预编译头 // stdafx.obj 将包含预编译类型信息 #include "stdafx.h" // TODO: 在 STDAFX.H 中 // 引用任何所需的附加头文件,而不是在此文件中引用 //构造 CSortFunc::CSortFunc(string Fname) { this->filename = Fname; } //读取信息 void CSortFunc::CGetInfo() { string thistr; int i = 0; readfile.open(filename, ios::in); //正常关联 if (readfile.is_open()) { //数据正常 while (!readfile.eof() && (readfile >> thistr).good()) { str[i] = thistr; i++; } count = i;//数据数量 } readfile.close(); } //获取最大下标 int CSortFunc::size() { return count - 1; } //快排 void CSortFunc::CQuickSort(int left, int right) { int i, j; string strt, strtmp; //递归出口 if (left > right) { return; } //基准数strtmp strtmp = str[left]; i = left; j = right; while (i != j) { //哨兵先从右往左 while (str[j].compare(strtmp) >= 0 && i < j) { j--; } //从左往右 while (str[i].compare(strtmp) <= 0 && i < j) { i++; } //交换位置 if (i < j) { strt = str[i]; str[i] = str[j]; str[j] = strt; } } //正确位置 str[left] = str[i]; str[i] = strtmp; CQuickSort(left, i - 1);//递归左侧 CQuickSort(i + 1, right);//右侧 } //保存结果 bool CSortFunc::CFileOut() { writefile.open("sortfile.txt", ios::out); for (int i = 0; i < count; i++) { writefile << str[i] << endl; } writefile.close(); return true; }
Sortfunction.cpp
// Sortfunction.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { CSortFunc m_sort("data.txt"); m_sort.CGetInfo(); m_sort.CQuickSort(0,m_sort.size()); if (m_sort.CFileOut()) { cout << "OK." << endl; } return 0; }
数据模块
源数据文件
data.txt
while if else do for switch case
结果数据文件
sortfile.txt
case do else for if switch while