算法:直接插入排序,选择排序,冒泡排序,判断回文字符串,实现字符串的反转以及内部反转

281 阅读1分钟

对字符串进行反转,以及内部子字符转的反转

///*
// *定义一个局部的反转函数,用来实现字符串的反转
// * */
//void test4_1(char s[]) {
//    int n = strlen(s);
//    char c;
//    for (int i = 0; i < (n + 1) / 2; ++i) {
//        c = s[i];
//        s[i] = s[n - 1 - i];
//        s[n - 1 - i] = c;
//
//    }
//}
//void test4(char s[]){
//    test4_1(s);//首先对整个字符串进行反转
//    char a[10]="\0";//定义一个局部的反转的存储空间,可根据需要定义大小
//    int count=0;//用来指向每次局部反转的开头
//    int j=0;//用来存储每一个局部字符串的长度
//    int flag=0;//用来存储空格个数,确定循环次数
//    for(int i=0;s[i];++i){
//        if (s[i]==' '){
//            flag++;
//        }
//    }//确定空格次数
//    for (int k = 0;k<=flag;++k){//控制循环次数
//        for (int i =count,l=0;s[i]&&s[i]!=' '; i++,++l) {
//            a[l] = s[i];
//            j = i;
//        }//对个子字符串进行分离
//        test4_1(a);//分离后进行反转
//        for (int i = count,l=0; a[l]; ++i,++l) {
//            s[i] = a[l];
//        }//将反转后的字符串写回原字符串
//        count = j + 2;
//    }
//}
////注意:在进行字符串分离和字符串写回的时候要单独用一个变量来循环,函数中的l就是这个作用
////否则会出错,因为字符串的位置不匹配
//int main(void){
//     char s[100]="\0";
//     gets(s);
//     test4(s);
//     puts(s);
//}

判断回文字符串

//char test3(char s[]){//判断回文字符串
//      int n=strlen(s);
//      int flag=0;
//    for (int i = 0; i <(n+1)/2; ++i) {
//        if (s[i]==s[n-1-i]){
//            flag++;
//        }
//
//
//    }
//    char result='n';
//    if (flag==(n+1)/2) {
//    result='y';
//    }
//    return result;
//}
//int main() {
//   char s[100];
//   scanf("%s",&s);
//   char c;
//   c=test3(s);
//   if (c=='y'){
//       printf("yes");
//   } else{
//       printf("no");
//   }
//
//}

冒泡排序

c.biancheng.net/view/6506.h…

///*
// * 冒泡排序
// * 总共需要排序循环n-1次
// * 没次排序n-1-i趟
// */
//int main(void){
//    int a[10]={1,2,45,4,78,6,99,8,9,100};
//    int temp;
//    for (int i = 0; i < 9; ++i) {
//        for (int j = 0; j <9-i; ++j) {
//            if (a[j]<a[j+1]) {
//                temp = a[j];
//                a[j] = a[j+1];
//                a[j+1] = temp;
//            }
//        }
//
//    }
//    for (int j = 0; j < 10; ++j) {
//        printf("%d ",a[j]);
//    }
//}

简单选择排序

///*
// * 选择排序
// * 排序n趟
// * 每趟遍历i->n-1找出最大或最小值
// * 进行交换,得出完整的排序
// */
//int main(void){
//int a[10]={10,9,8,7,6,90,4,3,2,1};
//int min,key,flag,k;
//    for (int i = 0; i<10; i++) {
//        min=a[i];
//        for (int j = i; j<10; j++) {
//           if (a[j]<=min){
//               min=a[j];
//               flag=j;
//           }
//        }
//        key=a[i];
//        a[i]=a[flag];
//        a[flag]=key;
//    }
//    for (int i = 0; i < 10; ++i) {
//        printf("%d ",a[i]);
//    }
//
//}

直接插入排序

//int main(void){//直接插入排序
//int a[10]={12,45,67,23,5,6,7,9,10,2};
//int x,i,j;
//    for ( i = 1; i < 10; ++i) {
//        x=a[i];
//        for ( j = i-1; j>-1&&a[j]>x ;a[j+1]=a[j],j--) {
//            ;
//        }
//        a[j+1]=x;
//    }
//    for (int k = 0; k < 10; ++k) {
//        printf("%d ",a[k]);
//    }
//}

以上内容为学习笔记,仅供参考。如有错误,还请指教。