c语言冒泡排序的函数 冒泡排序c语言用函数

1. 编写冒泡排序和选择排序的程序,主函数中编写菜单调用排序函数。C语言

//C语言示例代码如下

创新互联是专业的二七网站建设公司,二七接单;提供成都网站制作、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行二七网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

#include stdio.h

#define N 10

//冒泡排序(升序)

void bubble_sort(int a[],int n)

{

int i,j;  //j表示趟数,i表示第j趟两两比较的次数

int tmp; //临时变量

for(i=0;in-1;i++)

for(j=0;jn-1-i;j++)

{

if(a[j]  a[j+1])

{

tmp=a[j];

a[j]=a[j+1];

a[j+1]=tmp;

}

}

}

//选择排序算法,按从小到大顺序

void select_sort(int *array,int n)

{

int i,j,k;

int tmp;

for(i=0;in-1;i++)

{

k=i;  //开始一趟选择排序,假定第i个元素是后面n-i+1个未排序的元素中最小的元素

for(j=i+1;jn;j++)

{

if(array[k]  array[j]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标k

k=j;

}

//如果最小元素的下标不是后面n-i+1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置

if(k != i)

{

tmp=array[k];

array[k]=array[i];

array[i]=tmp;

}

}

}

int main()

{

int arr[N];

int i;

printf("输入数组元素: ");

for(i=0;iN;i++)

scanf("%d",arr[i]);

bubble_sort(arr,N);  //调用冒泡排序函数

printf("输出排序后的数组元素: ");

for(i=0;iN;i++)

printf("%d ",arr[i]);

printf("\n输入数组元素: ");

for(i=0;iN;i++)

scanf("%d",arr[i]);

select_sort(arr,N);  //调用选择排序函数

printf("输出排序后的数组元素: ");

for(i=0;iN;i++)

printf("%d ",arr[i]);

printf("\n");

return 0;

}

C语言课程作业,通过定义函数实现冒泡排序过程。

void sortMaopao(int *arr,int n)

{

int i,j,tmp;

if(n100)

return ;

for(i=0;in-1;i++)

{

for(j=i+1;jn;j++)

{

if(*(arr+i)*(arr+j))

{

tmp=*(arr+i);

*(arr+i)=*(arr+j);

*(arr+j)=tmp;

}

}

}

}

这个函数可以帮你实现由大到小排序,如果由小到大的话只需把if(*(arr+i)*(arr+j))这一句里面的 改成 就行了,输出的话可以在主函数调用之后再打印输出就行。

C语言的“冒泡排序”怎么做?sort(str)什么意思?

对于冒泡:

可以这样考虑

外层循环式控制一共有多少个泡需要排序, 这个当然要用循环

内层循环控制把某一个泡放到正确的位置, 这个也要用循环, 因为这个泡要和所有未排序泡比较一遍, 然后才能知道自己应该处的位置

这里有两个点,明白了的话,这道题就明白了

1. 外层循环: 仅仅控制一共有多少个泡需要排序, 比如代码中a[10], 一共是10个元素

2. 内层循环: 仅仅控制把当前最大的泡放到最后, 也就是一次内层循环,仅仅把最大的那个泡放到最后了而已

把1和2综合起来看

当j=0时,把a数组10个元素中最大的泡放到最后

当j=1时,把a数组10个元素中第二大的元素放到倒数第二个位置

依次类推..直到第10大的元素,即最小的元素放到正数第一个位置

楼主可以这样测试一下,会更加清晰,把第一个循环去掉, 内层循环改为:

for(i=0; i 10; i++) 相当于仅执行上述j=0的一次内层循环, 这个循环的作用是把最大的元素放到最后

在解释下内层循环为什么是 i10-j 其实这个不难理解

当j=0时, 相当于 for(i=0;i10;i++) 也就是遍历所有元素,把最大的放到最后

当j=1时, 相当于 for(i=0;i9;i++) 这次仅仅遍历前9个元素,把前9个元素中最大的放到第九个位置, 因为第10个位置已经是最大的了,不用再次比较了.

如果实在是对嵌套循环理解不了,还有个简单的办法,把外层循环解开:

也就是可以这么写:

//----------------------------------------

for(i=0;i10;i++) //等价于j=0

if (a[i]a[i+1])

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

}

for(i=0;i9;i++) //等价于j=1

if (a[i]a[i+1])

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

}

...//同上,仅仅是把i后面的值递减,直到

for(i=0;i1;i++) //等价于j=9

if (a[i]a[i+1])

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

}

上面这一系列代码,等价于原来的双层嵌套循环

sort(str) 就是用户自定义的冒泡排序函数的函数名,str作为函数参数

写一个函数实现冒泡排序功能

#includestdio.h

//冒泡排序函数

void bubbleSort(int data[],int n)

{

if(data==NULL || n1)//容错判断

return;

for(int i=0; in-1; i++)//比较的趟数

for(int j=0; jn-i-1; j++)//每趟比较的次数

{

//大数后移,最终的排序是非递减;要想非递增,判断条件换成

if(data[j]data[j+1])

{

int temp = data[j];

data[j] = data[j+1];

data[j+1] = temp;

}

}

}

//打印数组

void printdata(int data[], int n)

{

if(data==NULL || n1)//容错判断

return;

for(int i=0; in; i++)

printf("%d ", data[i]);

printf("\n");

}

int main()

{

int data[7] = {2,4,5,1,8,3,2};

printdata(data, 7);//排序前打印

bubbleSort(data, 7);//排序

printdata(data, 7);//排序后打印

return 0;

}


分享文章:c语言冒泡排序的函数 冒泡排序c语言用函数
URL分享:http://hbruida.cn/article/dophigg.html