小白学算法3.1——低位优先字符串排序

小白学算法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;
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值