十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
如果使用的是冒泡排序,那么和整数排序唯一的不同就是这个部分:
成都网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、小程序设计、集团企业网站设计等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:成都木屋等众多领域,积累了大量丰富的经验,同时也获得了客户的一致赞许!
if(a[j]a[j+1])
swap(a[j],a[j+1]);
那么在字符串排序的时候,需要用到一个库函数叫strcmp(char a[],char b[]);
这个函数在cstring库中[或者c语言中在string.h库中]
这个函数的用法就是输入字符串a,b,判断a,b的字典序大小.
若a的字典序小返回负值
若a的字典序和b相同返回0
若a的字典序大于b的字典序返回正数
然后你将上面冒泡的部分改一下的话就是:
if(strcmp(a[j],a[j+1])0)
swap(a[j],a[j+1]);
这样的话就可以实现冒泡排序了.
如果你使用的是系统快排的话,你可以用string,也可以定义一个结构体
struct Node{
char ch[1000];
}s[12];
bool cmp(const Node A,const Node B){
return strcmp(A.ch,B.ch)0;
}
int main(){
...
sort(s+1,s+10+1,cmp);
...
}
这样的话也是可以实现的.
用二维数组记录书名,再声明一个指针数组并使各元素分别指向各书名,然后对指针数组元素按其指向的书名的字典顺序排序。这样比直接拷贝书名的效率会高些。举例如下:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
#define N 10
void mysort(char *s[],int n){
int i,j,k;
for(i=0;in;i++){
for(k=i,j=k+1;jn;j++)
if(strcmp(s[k],s[j])0)
k=j;
if(i!=k){
s[i]=(char *)((unsigned)s[i]^(unsigned)s[k]);//交换指针
s[k]=(char *)((unsigned)s[k]^(unsigned)s[i]);
s[i]=(char *)((unsigned)s[i]^(unsigned)s[k]);
}
}
}
int main(void){
char book[N][30],*pbook[N];
int i,k;
for(i=0;iN;pbook[i]=book[i++]);
printf("Please enter 10 book-name...\n");
for(i=0;iN;pbook[i]=book[i++])
scanf("%s",book+i);
mysort(pbook,N);
for(k=i=0;iN;printf(++k%5 ? "%s " : "%s\n",pbook[i++]));//打出来看看......
if(k%5) printf("\n");
return 0;
}
写了一个模板函数,能兼容字符和数字的输出。
#includeiostream
using namespace std;
template class T
void swap(T num[], int i, int j)
{
if(i != j)
{
T tmp = num[i];
num[i] = num[j];
num[j] = tmp;
}
}
template class T
void print(T num[], int n, int i)
{
if(i == n)
{
for(int i = 0; i n; i++)
{
coutnum[i]" ";
}
coutendl;
}
else
{
for(int j = i; j n; j++)
{
swap(num, i, j);
print(num, n, i + 1);
swap(num, j, i);
}
}
}
int main()
{
//字母
char str[27] = {0};
for(int i = 0; i 26; i++)
{
str[i] = 'a' + i;
}
printchar(str, 3, 0);
//数字
int num[9] = {0};
for(int i = 0; i 9; i++)
{
num[i] = i;
}
printint(num, 9, 0);
return 0;
}
#include stdio.h
#include string.h
const int MAXLEN = 100;
const int MAXSIZE = 10;
void sort(char title[][MAXLEN],int n) {//排序
int i,j,k;
char tstr[MAXLEN];
for(i = 0; i n - 1; ++i) {
k = i;
for(j = i + 1; j n; ++j) {
if(strcmp(title[k],title[j]) 0)
k = j;
}
if(k != i) {
strcpy(tstr,title[k]);
strcpy(title[k],title[i]);
strcpy(title[i],tstr);
}
}
}
void show(char s[][MAXLEN],int n) {
int i;
for(i = 0; i n; ++i)
printf("%s",s[i]);
puts(" ");
}
int main(void) {
char s[MAXSIZE][MAXLEN];
int i;
for(i = 0; i MAXSIZE; ++i) {
printf("string(%02d/%d):",i + 1,MAXSIZE);
fgets(s[i],MAXLEN,stdin);
}
printf("排序前:\n");
show(s,MAXSIZE);
sort(s,MAXSIZE);
printf("排序后:\n");
show(s,MAXSIZE);
return 0;
}