vs2017快速排序c语言代码,字符串排序

46

#include

#include

#include

#include

using namespace std;

int main()

{

int input;

while (cin >> input)

{

string str;

vector vs;

while (input--)

{

cin >> str;

vs.push_back(str);

}

sort(vs.begin(), vs.end());

vector::iterator vit;

for (vit = vs.begin(); vit != vs.end(); vit++)

{

cout << *vit << endl;

}

}

return 0;

发表于 2016-01-05 18:10:02

回复(34)

41

本题的考察很基础,但是有一些细节问题需要注意,在C语言中应注意C语言的所有字符串的本质是以空字符'\0'结束的字符数组,所以在C语言中对于字符串的比较不能使用>

<

==这些常规的关系运算符,而要使用C语言标准库函数中的strcmp函数对字符串进行比较,比较的原则就是字典顺序,在C++中,string类对>

<

==这些运算符进行了重载,可以直接用来比较字符串,比较的原则依然是字典顺序。剩下的就是考察排序方法,常用的冒泡排序、选择排序等等都可以实现,代码如下:

#include

#include

using namespace std;

int main()

{

int String_Number,i,j;

string Input_String[1000],Temp;

cin>>String_Number;

for(i=0;i

cin>>Input_String[i];

for(i=0;i

{

for(j=0;j

{

if(Input_String[j]>Input_String[j+1])

{

Temp=Input_String[j];

Input_String[j]=Input_String[j+1];

Input_String[j+1]=Temp;

}

}

}

for(i=0;i

cout<

return 0;

}

发表于 2016-03-14 20:50:03

回复(11)

33

import sys

for i in sorted(list(map(lambda c:c.strip(),sys.stdin.readlines()[1:])),key=lambda c:c):print(i)

编辑于 2018-12-03 07:25:42

回复(19)

32

import java.util.Arrays;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int num = sc.nextInt();

String [] ss = new String[num];

for (int i = 0; i < num; i++) {

ss[i]=sc.next();

}

Arrays.sort(ss);

for (int i = 0; i < ss.length; i++) {

System.out.println(ss[i]);

}

}

}

发表于 2016-03-26 20:37:21

回复(17)

9

#include

#include

#include

typedef struct

{

char str[101];

} table_t;

int cmp( const void *a, const void *b )

{

for( int i = 0; i < 101; i ++ )

{

if( ((table_t *)a)->str[i] > ((table_t *)b)->str[i] )

return 1;

if( ((table_t *)a)->str[i] < ((table_t *)b)->str[i] )

return -1;

}

return 0;

}

int main( void )

{

int num = 0;

scanf( "%d", &num );

table_t* table = (table_t*)malloc( num * sizeof( table_t ) );

if( table == NULL )

exit( 1 );

for( int i = 0; i < num; i++ )

scanf( "%s", table[i].str );

/* 冒泡排序法 */

table_t my_index = {0};

for( int i = 0; i < num-1; i++ )

{

for( int j = 0; j < num-1-i; j++ )

{

if( strcmp( table[j].str, table[j+1].str ) > 0 )

{

strcpy( my_index.str, table[j].str );

strcpy( table[j].str, table[j+1].str );

strcpy( table[j+1].str, my_index.str );

}

}

}

//    qsort( table, num, sizeof( table_t ), cmp ); //快速排序标准库函数

for( int i = 0; i < num; i++ )

printf( "%s\n", table[i].str );

free( table );

return 0;

}

发表于 2018-04-10 11:40:32

回复(0)

8

import java.util.Collections;

import java.util.Iterator;

import java.util.Scanner;

import java.util.Vector;

public class StringSort {

//方法一

//public static void main(String[] args) {

//Scanner in=new Scanner(System.in);

//int n=in.nextInt();

//String[] arr = new String[n];

//for (int i = 0; i < n; i++) {

//arr[i]=in.next();

//}

//sortString(arr);

//for (int i = 0; i < arr.length; i++) {

//System.out.println(arr[i]);

//}

//}

//

//private static void sortString(String[] arr) {

//String temp=null;

//for (int i = 0; i < arr.length-1; i++) {

//for (int j = i+1; j < arr.length; j++) {

//if(arr[i].compareTo(arr[j])>0){

//temp=arr[i];

//arr[i]=arr[j];

//arr[j]=temp;

//}

//}

//}

//}

//方法二

public static void main(String[] args) {

Scanner in=new Scanner(System.in);

int n=in.nextInt();

Vector ve=new Vector();

for (int i = 0; i < n; i++) {

ve.add(in.next());

}

Collections.sort(ve);

Iterator it=ve.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

}

}

发表于 2016-02-18 11:33:48

回复(5)

10

num = int(raw_input())

s = []

for i in range(num):

s.append(raw_input())

s.sort()

for i in s:print i

发表于 2016-07-14 17:11:59

回复(3)

6

//使用 multiset

#include

#include

#include

using namespace std;

int main() {

int n;

while (cin >> n) {

multiset strset;

string tmp;

for (int i = 0; i < n; ++i) {

cin>>tmp;

strset.insert(tmp);

}

for (auto it = strset.begin(); it != strset.end(); ++it)

cout << *it << endl;

}

return 0;

}

编辑于 2017-05-29 11:54:34

回复(4)

3

//忘了c语言还有strcmp和strcpy这两个函数,结果想了好久QAQ

#include 

#include 

int main()

{

int n,i,j,k=0;

char a[1000][100]={'\0'},b[100]={'\0'};

scanf("%d",&n);

getchar();

for(i=0;i

gets(a[i]);

for(i=0;i

{

for(j=0;j

{

k=0;

while(a[j][k]||a[j+1][k])

{

if((a[j][k]>a[j+1][k]&&a[j][k]!=0)||a[j+1][k]==0)

{

memcpy(b,a[j],strlen(a[j])+1);

memset(a[j],'\0',strlen(a[j]));

memcpy(a[j],a[j+1],strlen(a[j+1])+1);

memset(a[j+1],'\0',strlen(a[j+1]));

memcpy(a[j+1],b,strlen(b)+1);

}

else if(a[j][k]==a[j+1][k])

k++;

else

break;

}

}

}

for(i=0;i

{

printf("%s\n",a[i]);

}

return 0;

}

发表于 2020-01-30 23:04:43

回复(0)

3

暴力Python的三行代码:

n, strings = int(input()),[]

for i in range(n):strings.append(input())

for str in sorted(strings): print(str)

发表于 2018-03-19 00:32:42

回复(3)

3

#include

using namespace std;

vector a;

string s;

int main(){

int n;

while(cin>>n){

a.clear();

while(n--){

cin>>s;

a.push_back(s);

}

sort(a.begin(), a.end());

for(int i = 0; i < a.size(); ++i) cout << a[i] << endl;

}

return 0;

}

发表于 2016-05-11 13:32:30

回复(0)

2

C语言实现,注意换行符

#include

(737)#include

int main()

{

int n;

char str[1000][100];

char *ptstr[1000];

scanf("%d",&n);

int c;

getchar();

for(int i=0;i

gets(&str[i][100]);

ptstr[i] = &str[i][100];

}

for(int j=0;j

for(int k=j+1;k

if(strcmp(ptstr[j],ptstr[k])>0){

char *temp;

temp = ptstr[k];

ptstr[k] = ptstr[j];

ptstr[j] = temp;

}

}

}

for(int ii=0;ii

puts(ptstr[ii]);

}

return 0;

}

发表于 2020-05-08 14:58:07

回复(1)

2

#include 

#include 

#include 

#include 

using namespace std;

int main()

{

int num;

string str;

cin>>num;

vector vec;

for(int i=0;i

{

cin>>str;

vec.push_back(str);

}

sort(vec.begin(),vec.end());

for(int i=0;i

{

cout<

}

return 0;

}

发表于 2019-09-14 21:47:46

回复(0)

2

import java.util.*;

public class Main{

public static void main(String[] args){

Scanner in = new Scanner(System.in);

int n = in.nextInt();

String[] s = new String[n];

for(int i = 0; i < n; i++){

s[i] = in.next();

}

Arrays.sort(s);

for(int i = 0; i < s.length; i++) {

System.out.println(s[i]);

}

}

}

发表于 2017-03-14 16:15:04

回复(3)

2

var rl = require('readline').createInterface(process.stdin, process.stdout);

var n = 0;

var arr = [];

var index;

var value;

var i;

rl.on('line', function(line) {

if (n === 0) {

n = parseInt(line.trim(), 10);

arr = new Array();

} else {

arr.push(line.trim());

n--;

if (n === 0) {

arr = arr.sort(function(a, b) {

if (a < b) return -1;

else return 1;

});

for (i = 0; i < arr.length; i++) {

console.log(arr[i]);

}

}

}

});

//毫不廉耻的用了JS自带比较方法

发表于 2016-08-08 02:49:21

回复(0)

2

nodejs 飘过

const readline = require('readline');

const rl = readline.createInterface(process.stdin,process.stdout);

var data = [];

rl.on('line',function(ans){

data.push(ans);

var n = data[0]-0;

var arr = [];

if(data.length==n+1){

arr = data.slice(1);

arr.sort().map(function(i){console.log(i)});

data = data.slice(0,0);

}

})

发表于 2016-08-04 18:36:36

回复(0)

2

可以用插入排序,也可以用vectorSTL的sort函数

#include

#include

#include

using namespace std;

int main(){

int n;

while (cin>>n){

if (!n)

continue;

vector v;

for (int i = 0; i

string temp;

cin >> temp;

int j = 0;

for (; j < i && temp >= v[j]; ++j);

v.insert(v.begin() + j, temp);

}

for (int i = 0; i < v.size(); ++i){

cout << v[i] << endl;

}

}

return 0;

}

发表于 2016-06-17 07:15:21

回复(0)

2

import java.util.Scanner;

import java.util.Arrays;

import java.util.Comparator;

public class Main{

public static void main(String[] args){

Scanner in = new Scanner(System.in);

while(in.hasNext()){

int n = in.nextInt();

String[] A = new String[n];

for(int i = 0;i

A[i] = in.next();

}

Arrays.sort(A,new Comparator(){

public int compare(String o1,String o2){

return o1.compareTo(o2);

}

});

for(int i =0;i

System.out.println(A[i]);

}

}

}

发表于 2016-03-19 12:55:55

回复(0)

3

#include

#include

#include

#include

using namespace std;

bool compare(const string s1, const string s2)

{

return s1 

}

int main()

{

int n;

vector strs;

while (cin >> n)

{

while (n--)

{

string str;

cin >> str;

strs.push_back(str);

}

sort(strs.begin(), strs.end());

//sort(strs.begin(),strs.end(),compare);

for (int i = 0; i 

{

cout <

}

}

return 0;

} 前面的输入都没有什么难的,主要是排序,可以使用algorithm中的sort排序,有两种形式,默认是以升序排列,正好符合此题,所以本人没有加bool函数,如果加的话要注意它只需要函数名,不需要括号。

发表于 2019-12-03 19:35:52

回复(0)

1

不用直接交换字符串,可以设置一个指针数组指向每一个串的首地址,然后对这个指针数组进行排序即可。使用快速排序算法: #include

#include

char ss[1000][101];

char* ps[1000];

void swap(int i, int j)

{

char* tmp = ps[i];

ps[i] = ps[j];

ps[j] = tmp;

}

int partition(int p, int r)

{

char* pivot = ps[r];

int i = p - 1, j;

for (j = p; j <= r - 1; ++j) {

if (strcmp(ps[j], pivot) <= 0) {

++i;

if (i != j) swap(i, j);

}

}

swap(i + 1, j);

return i + 1;

}

void qsort(int p, int r)

{

if (p >= r) return;

int q = partition(p, r);

qsort(p, q - 1);

qsort(q + 1, r);

}

int main()

{

int n;

scanf("%d", &n);

for (int i = 0; i < n; ++i) {

scanf("%s", ss[i]);

ps[i] = ss[i];

}

qsort(0, n - 1);

for (int i = 0; i < n; ++i) printf("%s\n", ps[i]);

return 0;

}

发表于 2021-02-24 22:32:38

回复(0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值