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]);
    }

——算法

->数组排序

->冒泡排序

->若有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     }

—字符数组

->数组里也都是变量

->%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;

->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);

时间: 2024-10-01 22:10:32

C-冒泡排序,选择排序,数组的相关文章

C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序,然后是測试的样例.代码位置:http://download.csdn.net/detail/luozuolincool/8040027 排序类: public class Sortings { //插入排序 public void insertSort(int[] array) { int temp = 0; int index = 0; for (int i = 0; i <

C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序

下面列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序,然后是测试的例子.代码位置:http://download.csdn.net/detail/luozuolincool/8040027 排序类: public class Sortings { //插入排序 public void insertSort(int[] array) { int temp = 0; int index = 0; for (int i = 0; i <

经典排序:冒泡排序+选择排序 小结

经典排序:冒泡排序+选择排序 例 FJUTOJ 1842 冒泡排序 原理是取相邻两个数进行大小比较,判断是否交换. 以从小到大排序为例,冒泡排序就像气泡一样,最小的数慢慢浮上来,最大的数慢慢沉下去.那么完整从头到尾做一次之后最后一位就是原序列中最大的数字了.然后只需要对1~(n-1)个数字进行排序,完成后倒数第二个数字也为原序列的1~n-1元素中最大的值.如此重复,进行n-1次一定能完成排序.参考代码: 1 #include <stdio.h> 2 void BubbleSort(int *,

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定

基本排序算法(冒泡排序 选择排序 插入排序 快速排序 归并排序 基数排序 希尔排序)

冒泡排序 public static void bubbleSort(int[] arr){ int lgn = arr.length; for (int i = 0; i < lgn - 1; i++) { for (int j = 0; j < lgn - 1 - i; j++) { if(arr[j] > arr[j + 1]){ int temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } } 选择排序 publ

8.8 冒泡排序 选择排序 二分查找 递归使用

冒泡排序: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 100000 #define M 100000 void show_arr(int * a,int n) { int i; for(i = 0; i < n; i++) { printf("%d ",a[i]); } printf("\n"); } void init_arr(in

C 冒泡排序 选择排序

数组的冒泡排序与选择排序 [email protected]:~/select$ cat main.c  #include <stdio.h> #include <stdlib.h> int swap_conut  = 0 ; //记录交换次数 int loop_count  = 0 ; //记录循环次数 void swap(int *a,int *b) //指针级 数据交换 { //一个数连续异或同样的数两次,还是这个数 //相同位结果为0,不同位结果为1 *a = *a ^ *

排序算法详解(Go语言实现):冒泡排序/选择排序/快速排序/插入排序

算法是程序的灵魂,而排序算法则是一种最基本的算法.排序算法有许多种,本文介绍4中排序算法:冒泡排序,选择排序,快速排序和插入排序,以从小到大为例. 一.冒泡排序 冒泡排序的原理是,对给定的数组进行多次遍历,每次均比较相邻的两个数,如果前一个比后一个大,则交换这两个数.经过第一次遍历之后,最大的数就在最右侧了:第二次遍历之后,第二大的数就在右数第二个位置了:以此类推. //冒泡排序(排序10000个随机整数,用时约145ms) func bubbleSort(nums []int) { for i

【算法】插入排序/冒泡排序/选择排序

插入排序 插入排序的思想为:从数组的第二个元素开始遍历整个数组.针对每个元素,依次将其前面的所有元素和他进行比较,大于它的元素均向后移动,最后将该元素插入. 插入排序是一种稳定的排序算法. 时间复杂度T(n)=O(n^2) 最好情况下已排好序,T(n)=O(n) private void swap(int[] a, int i, int j) { int temp = a[j]; a[j] = a[i]; a[i] = temp; } 插入排序的关键代码 private void insertS