冒泡排序+指针实现 && training...

指针训练:利用指针实现函数传参以及冒泡排序

##冒泡排序及指针传参##

初学指针的用法,承接上一条微博中利用指针交换元素,这次训练用指针实现冒泡排序,并将排序函数从main函数中独立出来调用,调用过程使用type_date *array_name,来使用指针传递参数,主函数中凡是数组,就只需要数组名来传递参数,就是传数组的首地址就对了。

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


swap(int *ptr1, int *ptr2)
{
    int temp;
    temp = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = temp;
}

bubble_arrange(int *term, int n) //指针传参;
{
    int *init = term; //设置一个初始指针记录冒泡排序中数组的初始地址;******特别注意,这里初始化指针不能写成*init = *term;******
    int flag; //记录是否完成了一次冒泡排序;
    do
    {
        flag = 0; //flag为0表示假设完成,若触发for循环中if语句使flag = 1,则表示没有排序完成;
        for(int i=0; i<n-1; ++i)
        {
            if(*term>*(term+1))
            {
                swap(term,term+1);
                term++; //指针后移,比较下一对数据
                flag = 1;  //若发生交换,则表示排序未完成,继续while循环;
            }
            else
                term++; //指针后移
        }
        term = init;
        n--; //一次冒泡排序就会有一个元素有序,故待排数据-1;
    }while(flag); //排序完成的标志是一趟排序后没有元素发生交换(即flag = 0);
}

int main()
{
    int n,a[100];

    printf("please input the number of your sequence: ");
    scanf("%d",&n);
    printf("\nplease input a sequence to be sorted:");
    for(int i = 0; i<n; i++)
        scanf("%d", &a[i]);

    bubble_arrange(a,n);

    printf("\narranged sequence: \n");\
    for(int i=0; i<n; i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

** ¥¥¥¥¥¥¥¥编程路上,你我为伴¥¥¥¥¥¥¥ **
你我一起加油,未来皆有可能!

发布了29 篇原创文章 · 获赞 5 · 访问量 693

猜你喜欢

转载自blog.csdn.net/ever_promise/article/details/104245583