zoukankan      html  css  js  c++  java
  • C 一维数组 冒泡排序,查最大值

    1. 初始化

    char a[10] = {'1','2','3','4','5'};//指定数组大小并部分赋初值, 其余部分赋值 '' ,ASSIC 是 0
    char b[] = {'1','2','3','4','5'};//未指定数组大小赋初值, 数组根据元素个数确定大小
    

      

    2. 练习,字符数组把内容逆序,如: "hello" 换为 "olleh"

    方法1:(把数组折半遍历和后一半交换数据)

    分析:数组长 5 ,那麽只需要前两个与后两个交换即可,中间的不变 5 / 2 = 2,下标从0开始 则只需要使 a[0] 与a[4] 交换; a[1] 与 a[3] 交换

         数组长 6 ,中间的不变 6 / 2 = 3,下标从0开始 则只需要使 a[0] 与a[5] 交换; a[1] 与 a[4] 交换 ; a[2] 与 a[3] 交换即可

    #include <stdio.h>
    #define M 20
    int main(int argc, const char *argv[])
    {
       char data[M] = {0};
         int i = 0;
       char ch = 0;
        int len = 0;
    
       while((ch = getchar()) != '
    ') //通过getchar获取字符串,使用scanf时不能获取 ' ' 空格符
        {
          data[i++] = ch; //把获取的字符放在数组中      
          if(len != 20) //数组不能越界, len=20时退出while循环
          {      
           len+=1;   
          }      
          else      
          {     
            break;      
          }
        }
    
        for(i = 0; i < len/2; i++) //折半交换
       {
          ch = data[i];
          data[i] = data[len-1-i];
          data[len-1-i] = ch;
       }
       puts(data); //回车符
       return 0;
    }
    

      

    方法2:

    int main(int argc, const char *argv[])
    {
    	int i=0,j=0;
    	int len=0;
    	char ch = 0;
    
    	while((ch=getchar())!='
    ' && len<10)
    	{
    		in[i++] = ch;
    		len++;
    	}
    	
    	len = strlen(in);
    	for(i=len-1,j=0;i>=0;i--,j++)
    	{
    		out[j]= in[i];
    	}
    	printf("%s
    ",out);
    	return 0;
    }
    

    3. 查找数组中最大的值

    #include <stdio.h>
    #define MAX 5
    int main(int argc, const char *argv[])
    {
    	int buf[MAX] = {0};
    	printf("请输入 5 个整数
    ");
    	int i = 0;
    	for(i=0; i<MAX; i++)  //终端获取值放在数组中
    	{
    		scanf("%d",&buf[i]);
    	}
    
    	int m = 0;
    	int j = 0;
    	int tip = 0;
    	for(i=0;i<MAX;i++)  //使用一个中间值,遍历数组比较大小,然后把最大的值放在这个中间值
    	{
    		if(m < buf[i])
    		{
    			m = buf[i]; //获取最大值,放在中间值 m 中
    			tip = i;  //获取这个数组中最大值 的下标
    		}
    	}
    	printf("max = %d
    ",m);
    	printf("tip = %d
    ",tip);
    	return 0;
    }
    

      

    4. 冒泡排序

    #include <stdio.h>
    #define MAX 6
     
    int main(int argc, const char *argv[])
    {
        int i = 0;
        int j = 0;
        int a[MAX] = {0};
        int s = 0;
        for(i=0;i<MAX;i++) //输入值,存在数组中<br>      
    	{
            scanf("%d",&a[i]);   
    	}
     
        for(i=0;i<MAX-1;i++) //
        {
            for(j=0;j<MAX-1-i;j++)  //每次都是从第一个数开始比较,但是最后一个可定是最大的(最小的)数据,则每次循环的最后一个数据就是最值
            {
                if(a[j] > a[j+1])  //最大值,下标最大 , 把最大的值依次往后移
                {
                    s = a[j];
                    a[j] = a[j+1];
                    a[j+1] = s;
                }
                 
                /*
                if(a[j+1] > a[j]) //最小值,下标最大 , 把最小值依次往后移
                {
                    s = a[j];
                    a[j] = a[j+1];
                    a[j+1] = s;
                }<br>                */
            }
        }
        for(i=0;i<MAX;i++) <br>     {
            printf("%d
    ",a[i]);
          }
        return 0;
    }
    

      

    5. 冒泡排序优化

    #include <stdio.h>
    #define MAX 6
    
    int main(int argc, const char *argv[])
    {
    	int i = 0;
    	int j = 0;
    	int a[MAX] = {0};
    	int s = 0;
    	for(i=0;i<MAX;i++)  scanf("%d",&a[i]);
    
    	int min = 0;
    	for(i=0;i<MAX-1;i++)
    	{
    		min = j;
    		for(j=i+1;j<MAX;j++)
    		{
    			if(a[min] > a[j]) //min 时刻获取最小值的下标
    			{
    				min = j;
    			}
    		}
    		if(min != i)
    		{
    			s = a[min];
    			a[min] = a[i];
    			a[i] = s;
    		}
    	}
    	for(i=0;i<MAX;i++)
    		printf("%d
    ",a[i]);
    
    	return 0;
    }
    

      

  • 相关阅读:
    js三种经典排序:冒泡排序、插入排序、快速排序
    CSS小技巧
    2017
    实际开发中的问题积累【积累】
    F.I.S本地环境的搭建教程
    移动端前端开发注意点(未完待续)
    【六】PHP正则表达式方法
    【五】PHP数组操作函数
    【三】php之梗
    【二】php常用方法
  • 原文地址:https://www.cnblogs.com/electronic/p/10785712.html
Copyright © 2011-2022 走看看