小白学算法3.1——低位优先字符串排序
标签: 小白学算法 博客
本节内容总结自《算法(第4版)》5.1节
1.低位优先字符串排序
相比较于数字,字符串在生活中出现的频率更高,更常用,如姓名、车牌和电话号码等,而字符串常常也需要按照一定的顺序存放(一般是ASCII顺序),此时决定顺序的键就是字符串。字符串常见的排序算法有两种,分别是低位优先(LSD)和高位优先(MSD),低位优先从右向左检查字符,高位优先从左向右检查字符。
低位优先字符串排序要求待排序的字符串长度一致。
低位优先字符串排序和基数排序非常的相似。假设字符串的长度为W
,首先以最低位W-1
位为键进行排序,再以W-2
位为键进行排序,……,直到以0
位为键进行排序,此时排序的结果就是最终的结果。显而易见,低位优先字符串排序是稳定排序。
2.低位优先字符串排序实现
假设现在有美国加州的一部分车牌号需要排序,存储在data.txt
中,具体内容如下:
4PGC938
2IYE230
3CIO720
1ICK750
1OHV845
4JZY524
1ICK750
3CIO720
1OHV845
1OHV845
2RLA629
2RLA629
3ATW723
车牌号长度为7,所以从最低位到最高位依次排序7次,用循环解决。R
表示字符串基数,即所有字符串中不同字符的个数,常常选为128或者256,因为7位或者8位的ASCII码能够表示大多数的字母字符串。
#include "stdafx.h"
#include <IOSTREAM>
#include <FSTREAM>
#include <STRING>
#include <VECTOR>
const int W = 7;
const int R = 128;
using namespace std;
int main(int argc, char* argv[])
{
string str;
vector<string> sVec;
ifstream infile("data.txt");
cout<<"Before sort:"<<endl;