C/C++冒泡排序数字、字符串
引言
冒泡排序相信大家都不陌生,即通过循环,数进行两两比较、交换,像水泡一样小的逐渐往上浮,大的逐渐往下沉,从而达到排序的效果。
C语言实现冒泡数组排序
下面是将输入的十个数进行排序
#include <stdio.h>
int main() {
int a[10];
int i,tem,k;
for (i = 0; i < 10; i++) {
scanf("%d", (a+i));
}
for(i=0;i<10;i++)
k=1;
for(int j=0;j<9-i;j++ ){
if(a[j]<a[j+1]){
tem=a[j];
a[j]=a[j+1];
a[j+1]=tem;
k=0;
}
if(k)break;
}
}
for(i=0;i<10;i++){i==0?printf("%d",a[i]):printf(" %d",a[i]);}
return 0;
}
这里k的作用用于标记,来判断数组是否提前排序完,以免造成效率的浪费。
C语言/c++对字符串的排序
注意的是字符串比较大小不能直接用关系运算符(==除外),用的是 strcmp(a,b),返回负数则a<b,返回正数a>b,返回0则a ==b.
C++版
#include <iostream>
using namespace std;
int main() {
string a[10],b;int i,j,k;
for(i=0;i<10;i++){cin>>a[i];}
for(i=0;i<10;i++){
k=1;
for(j=0;j<9-i;j++){
if(a[j].compare(a[j+1])>0){
b=a[j];
a[j]=a[j+1];
a[j+1]=b;
k=0;
}
}
if(k)break;
}
for(i=0;i<10;i++){
cout<<a[i]<<'\n';
}
return 0;
}
c++的优越性在于其有string类型,不像C语言用字符串数组表示,具有一定的简并性。
C语言版
因为C语言无string类型 ,所以要建立一个二维数组,二维数组大小依据题目所给而定。如我此处可设数组为a[10][21]。
strcpy赋值法
#include<stdio.h>
#include<string.h>
int main(){
char a[10][21],b[10];int i,j,k;
for(i=0;i<10;i++){scanf("%s",a[i]);}
for(i=0;i<10;i++){
k=1;
for(j=0;j<9-i;j++){
if(strcmp(a[j],a[j+1])>0){
strcpy(b,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],b);
k=0;
}
}
if(k)break;
}
for(i=0;i<10;i++){printf("%s\n",a[i]);}
return 0;
}
指针赋值法
可以建立一个指针数组来赋值
#include<stdio.h>
#include<string.h>
int main(){
char a[10][21],*b[10];int i,j,k;
for(i=0;i<10;i++){scanf("%s",a[i]);b[i]=a[i];}
for(i=0;i<10;i++){
k=1;
for(j=0;j<9-i;j++){
if(strcmp(b[j],b[j+1])>0){
char*c=b[j];
b[j]=b[j+1];
b[j+1]=c;k=0;
}
}
if(k)break;
}
for(i=0;i<10;i++){printf("%s\n",b[i]);}
return 0;
}