C-冒泡排序,选择排序,数组

——构造类型
->数组
     ->一维数组
     ->相同类型的一组数据
     ->类型修饰符--数组名—[数组的元素个数(必须是整型表达式或者是整型常量,不能是变量)] {初始化}
    int arr[3] = {1,2,3};
    arr[1] = 5;
    printf("%d",arr[1]);
     ->数组内存的值为变量
     ->使用数组的时候中括号内可以是变量
->sizeof()是一个运算符,不是一个函数,可以计算变量或者变量修饰符占了多少个字节,也可以对数组进行计算占的字节数
    int a[3] = {1,2,3};
    printf("%ld\n",sizeof(double));
    printf("%ld\n",sizeof(char));
    printf("%lu",sizeof(a));
     ->数组所占用的内存空间等于数组元素个数*单个元素所占的内存空间.
     
->用循环输出数组比较快
    short arr[] = {1,2,3};
    printf("%ld\n",sizeof(arr));
    for (int i = 0; i < 3 ; i ++) {
        printf("%d\t",arr[i]);
    }
     ->数组合并
    for (int i = 0; i < 100000000; i++) {
        int a[20] = {0}, b[20] = {0}, c[20] = {0};
        for (int i = 0; i < 20; i ++) {
            a[i] = arc4random() % 21 + 20;
            b[i] = arc4random() % 21 + 20;
            c[i] = a[i] + b[i];
            if (c[i] == 80) {
                printf("\na[%d](%d)+ b[%d](%d)= c[%d](%d)",i,a[i],i,b[i],i,c[i]);
            }
            //        printf("\na[%d](%d)+ b[%d](%d)= c[%d](%d)",i,a[i],i,b[i],i,c[i]);
            
        }
    }
 ->循环输入值,赋值给相应的数组下标

    //错误问题:

    //数组是一个整体不能够参与运算

    //只能取每个元素逐一使用

 

//随机一个具有20 整型数组  找出数组中最大值
    int a[20] = {0};
    int max = 0;
    for (int i = 0 ; i < 20; i++) {
        a[i] = arc4random() % 100;
        printf("%d\t",a[i]);
        if (a[i] > max) {
            max = a[i];
        }
        //max = a[i] > max ? a[i]:max;
    }
    printf("\n最大数:%d",max);

    int a[20] = {0};
    int  min = arc4random() % 101;
    for (int  i = 0;  i < 20 ; i++) {
        a[i] = arc4random() % 101;
        if (min > a[i]) {
            min = a[i];
        }
        printf("%d ",a[i]);
    }
    printf("\n最小值:%d",min);

    int a[5] = {0};
    for (int i = 0 ; i < 5 ; i ++) {
        scanf("%d",&a[i]);
        
    }
    for (int i = 0 ; i < 5 ; i++) {
        printf("\t%d",a[i]);
    }
View Code

 

——算法
->数组排序
     ->冒泡排序
          ->若有n个元素,则外层循环走n - 1次
          ->内层循环需要, n - 1 - i 次
 
 1     int arry[5] = {0};
 2     for (int i = 0 ; i < 5; i ++) {
 3         arry[i] = arc4random()%21 + 50;
 4         printf("%d\t",arry[i]);
 5     }
 6     printf("\n");
 7     for (int i = 0 ; i < 4 ; i++) {
 8         for (int j = 0 ; j < 4 - i; j++) {
 9             if (arry[j] > arry[j + 1]) {
10                 int temp = arry[j];
11                 arry[j] = arry[j+1];
12                 arry[j+1] = temp;
13             }
14         }
15     }
16     for (int i = 0; i < 5; i++) {
17         printf("%d\t",arry[i]);
18     }
View maopao
     ->选择排序
          ->外层循环控制比较趟数,每趟开始的时候假定开始的位置是最小值
          ->内层循环,从后面的一个值开始逐一比较,如果比最小值更小,更新,最小值的          位置.
          ->每趟结束之后如果最小值的位置和假定的最小值位置不一样则交换,一样则不用交换位置.
 
(也就是每趟比较的是下标,交换的也是下标,保证每趟交换之后,下标是最小的,然后再与最初假定的最小下标相比,如果不相同  则交换值)
 
 1     int arry[20] = {0};
 2     for (int i = 0; i < 20 ; i++) {
 3         arry[i] = arc4random() % 100;
 4         printf("%d\t",arry[i]);
 5     }
 6     for (int i = 0 ; i < 19 ; i++) {
 7         int minIndex = i;
 8         for (int j = i + 1 ; j < 20 ; j++) {
 9             if (arry[minIndex] > arry[j]) {
10                 minIndex = j;
11             }
12 
13         }
14         if (minIndex != i) {
15             int temp = arry[i];
16             arry[i] = arry[minIndex];
17             arry[minIndex] = temp;
18         }
19     }
20     printf("\n");
21     for (int i = 0 ; i < 20; i++) {
22         printf("%d\t",arry[i]);
23     }
View Code

 

—字符数组
     ->数组里也都是变量
     ->%s专门输出字符串
     ->\0 标志字符数组的结束
    //计算字符串数组中的空格数
    char a[100] = "aslkdj alskf   salkjd  slkf";
    int i = 0,sum = 0;
    while (a[i] != 0) {
        if (a[i] == ' ') {
            sum++;
        }
        i++;
    }
    printf("%d",sum);

    char str[100] = "";
    //scanf("%s",str );
    scanf("%[^\n]",str);
//    gets(str);
    printf("%s",str);
    return 0;
View Code
->strlen()(无符号长整型)
 
输出时并不考虑\0
->strcpy(后边拷到前边)
     ->最后一个\0会被拷过去
     ->被考入的字符串数组范围必须大于 要拷的字符串范围,不然会越界,虽然还会执行,但是有风险.
->strcat()
     ->两个字符串连到一起
     ->被拼入的字符串内存也要够大,不然会报错
->strcmp()
         ->逐一比较两个字符串相对应的字符的ASCII码值大小,返回值是整型
          ->如果两个字符串相应位置的ASCII码的差值不是零,则返回差值,也会是负数
->计算字符数组中空格数
->输入字符串
     ->scanf遇到空格默认是结束
     ->输出格式改为:”%[^\n]” 除了空格都要
 1     //字符数组
 2     //char arry[10] = {'m','a','o','m','a','o','h','h'};
 3 //    char arr[10] = {"maomaohehe"};
 4 //    printf("%c",arry[7]);
 5     // arry[3] = 0;
 6 //    char arry1[] = "hello";//系统会自动补一个\0
 7 ////    char arry3[] = {'h' , 'e', 'l', 'l', 'o'};
 8 //    char arry2[] = {'h' , 'e', 'l', 'l', 'o'};//这中方法系统不会补\0  如果用printf("%s\n",arry2);输出  系统不会停止,除非遇到\0
 9 //    printf("%s\n",arry2);
10 
11     
12     //printf("%s",arry);
13 //    
14 //    char string[] = "i love iOS!";
15 //    unsigned long length = strlen(string);
16 //    printf("%lu",length);
17 
18     
19 //    char string[] = "iloveiOS";
20 //    int i = 0;
21 //    while (string[i] != 0) {
22 //        i++;
23 //    }
24 //    printf("%d",i);
25     
26 //    char arry1[20] = "aaaaaaaa";
27 //    char arry2[10] = "iphone";
28 ////    strcpy(arry1, arry2);
29 ////    printf("%s",arry1);
30 ////    strcat(arry1, arry2);
31 //
32 //    int result = strcmp(arry1, arry2);
33 //    //printf("%s",arry1);
34 //    printf("%d",result);
View Code

 

posted @ 2015-07-28 09:20  IT_JQm  阅读(305)  评论(0编辑  收藏  举报