C语言冒泡排序法

下面说两种方法,一种是数组下标法,一种是指针法。

数组下标法:

#include<stdio.h>
#include<stdlib.h>

void bubble_sort(int arr[], int sz)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < sz - 1; i++)
    {
        for (j = 0; j < sz - 1 - i; j++)
        {
            if (arr[j]>arr[j + 1])
            {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }

        }
    }
}

void printf_arr(int arr[], int sz)
{
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
}
int main()
{
    int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
    int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素的个数
    bubble_sort(arr, sz);//注意这里传递的数组名实际上是传递了数组首元素的地址,在函数里面仍然按指针进行计算
    printf_arr(arr, sz);
    system("pause");
    return 0;
}

指针法:

#include<stdio.h>
#include<stdlib.h>

/*基本思想:定义三个指针,一个指向数组的第一个元素start,一个指向数组的最后一个元素end,一个指向数组要比较
            的元素cur。start和end控制要走的趟数,当start<end时,进行循环,循环一次,end-1。cur和end控制一
            趟比较的次数,当cur<end时,进行循环,循环一次,将cur+1。小循环里面是核心代码,即当cur指向元素
            小于cur+1指向元素时,将这两个元素进行交换。*/

//冒泡排序函数
void bubble_sort(int arr[], int sz)
{
    int *start = arr;//定义开始指针
    int *end =  arr + sz - 1;//定义结尾指针
    int *cur = arr;
    for (start = arr; start < end; end--)//控制趟数
    {
        for (cur = arr; cur < end; cur++)//控制一趟走的次数
        {
            if (*cur < *(cur + 1))
            {
                int tmp = *cur;
                *cur = *(cur + 1);
                *(cur + 1) = tmp;
            }
        }
    }
}

//打印输出函数
void print(int arr[], int sz)
{
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main()
{
    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int sz = sizeof(arr)/sizeof(arr[0]);
    print(arr, sz);
    bubble_sort(arr, sz);
    print(arr, sz);
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/windyj809/article/details/79821432