数组的运算 和 两种排序


1.数组的初始化

 

 

2.数组的赋值操作

     

 

 

3.数组在函数中的传入

 

4.选择排序

 

思路:

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

 

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

 

重复第二步,直到所有元素均排序完毕。

 

#include<stdio.h>

int min(int*, int);

int main(void)
{
    int a[] = { 2,45,6,12,87,34,90,24,23,11,65 };
    int len = sizeof(a) / sizeof(a[0]);
//这个操作可以很方便的得到数组的长度

    int j = 0;
    for (int i = len - 1; i > 0; i--)
    {
        int minid = min(a, len);//得到数组中最小的元素的下标
        int t = a[minid];
        a[minid] = a[j];
        a[j] = t;//将最小元素与第j个元素交换
        j++;//交换后将j的数字加1,即进入下一个数字的排序
    }

    for (int i = 0; i < len; i++)
    {//输出数组
        printf("%d ", a[i]);
    }
    return 0;
}

int min(int* a, int len)
{
    static int j = 0;
//这里定义一个静态局部变量,目的是让排好的元素不加入最小值的比较
    int minid = len - 1;
    for (int i = j; i < len; ++i)
    {
        if (a[i] < a[minid])
        {
            minid = i;
        }
    }
    j++;
    return minid;
}

 

 5.冒泡排序

 

思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。

 

    (1)第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面。

 

    (2)比较第2和第3个数,将小数 放在前面,大数放在后面。

 

    ......

 

    (3)如此继续,知道比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成

 

    (4)在上面一趟比较完成后,最后一个数一定是数组中最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的。

 

    (5)在第二趟比较完成后,倒数第二个数也一定是数组中倒数第二大数,所以在第三趟的比较中,最后两个数是不参与比较的。

 

    (6)依次类推,每一趟比较次数减少依次

 

 

//冒泡排序
void sort(int * a, int len)
{
    int i, j, t;

    for (i=0; i<len-1; ++i)
    {//总的比较次数
        for (j=0; j<len-1-i; ++j)
        {
//循环判断条件中的len-1-i则是为了使得排好的元素不参与比较
            if (a[j] > a[j+1])  // >表示升序 <表示降序
            {
//将两个相邻数组元素进行比较,并将最大的元素放到最后面
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t; 
            }
        }
    }
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM