指针训练:利用指针实现函数传参以及冒泡排序
##冒泡排序及指针传参##
初学指针的用法,承接上一条微博中利用指针交换元素,这次训练用指针实现冒泡排序,并将排序函数从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;
}
** ¥¥¥¥¥¥¥¥编程路上,你我为伴¥¥¥¥¥¥¥ **