华为OJ(n个字符串按照字典序排序)

题目描述

给定n个字符串,请对n个字符串按照字典序排列。

输入描述

输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。

输出描述

数据输出n行,输出结果为按照字典序排列的字符串。

示例

//输入
9
cap
to
cat
card
two
too
up
boat
boot
//输出
boat
boot
cap
card
cat
to
too
two
up

思路

因为string对象重载了比较运算符,可以和数字一样比较。两个string对象,根据第一个不同的字符ascii码值决定大小,若其中一个串是另一对象的子串,则子串更小。我的解答用一个vector容器存放所有string对象,再采用快速排序。注意vector作为函数参数时在这里要传它的引用,因为要改变它。

#include 
#include 
#include 
using namespace std;

void quicksort(vector<string>& r,int low, int high) {
  if(low<high) {
    string temp = r[low];
    int i=low,j=high;
    while(i!=j) {
      while(i<j && temp <= r[j]){
        j--;
      }
      if(i<j) {
        r[i] = r[j];
        i++;
      }
      while(i<j && temp >= r[i]){
        i++;
      }
      if(i<j) {
        r[j] = r[i];
        j--;
      }
    }
    r[i] = temp;
    quicksort(r,low,i-1);
    quicksort(r,i+1,high);
  }
}
int main() {
  int n;
  string s;
  vector<string> arr;
  cin >> n;
  for(int i=0;i<n;i++) {
    cin >> s;
    arr.push_back(s);
  }
  quicksort(arr, 0, arr.size()-1);
  for(int i=0;i<n;i++) {
    cout<<arr[i]<<endl;
  }
}

你可能感兴趣的:(基础知识)