重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#includeiostream
创新互联是一家专注于成都网站设计、成都做网站与策划设计,阿拉尔网站建设哪家好?创新互联做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:阿拉尔等地区。阿拉尔做网站价格咨询:18980820575
using namespace std;
void Sort(int a[],int n);
int main()
{
int i,n,a[1001];
cinn;
for(i=1;i=n;i++)
cina[i];
Sort(a,n);
for(i=1;i=n;i++)
couta[i]" ";
system("pause");
return 0;
}
void Sort(int a[],int n)
{
int i,j,x,flag;
for(i=1;i=n;i++)
{
flag=0;
for(j=1;j=n-i;j++)
if(a[j+1]a[j])
{
flag=1;
x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
if(flag==0)
break;
}
}
【注意】上面那个数组下标是从1开始的,本人习惯从1开始
还有一种超好的排序方法,我一直用它:
#includeiostream
#includealgorithm
using namespace std;
int main()
{
int n,i,a[10001];
cinn;
for(i=1;i=n;i++)
cina[i];
sort(a+1,a+n+1);//默认是升序
for(i=1;i=n;i++)
couta[i]" ";
system("pause");
return 0;
}
你说的嵌套定义和调用是什么意思?
2.应该是 swap 吧?假如你用的是局部变量,那函数调换的就是局部变量,这时传递进来的参数就没有被交换了。除了用全局变量,还可以用指针。
3.都是值传递,数组传递的是第一个元素的指针。
实参是形参的拷贝
实参的值改变不影响形参
#include stdio.h
void exch(int *a,int *b)
{
int temp;
temp =*a;
*a=*b;
*b=temp;
}
void comexch(int *m,int *n)
{
if(*m*n)
exch(m,n);
}
void main()
{
int i,a[10];
printf("please input 10 numbers:");
for(i=0;i10;i++)
scanf("%d",a[i]);
for(i=0;i10;i++)
printf("%d\n",a[i]);
int j,k,temp;
for(j=0;j10;j++)
{
for(k=10;kj;k--)
comexch(a[k-1],a[j]);
}
printf("\n结果为:\n");
for(k=0;k10;k++)
printf("%d\n",a[k]);
}
#includestdio.h
#includestdlib.h
void mao_pao(int *a,int n)
{
int i,j,temp,flag;
for(i=0;in-1flag;++i)
{
flag=0;
for(j=0;jn-1;++j)
{
if(a[j]a[j+1])
{
flag=1;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
void main()
{
int *a,i,n;
a=(int *)malloc(100);
if(NULL==a)
{
printf("allocation failture\n");
exit(1);
}
printf("请输入你要排序的元素的个数\n");
scanf("%d",n);
printf("现在开始输入%d个元素\n",n);
for(i=0;i!=n;++i)
scanf("%d",a[i]);
mao_pao(a,n);
printf("排序后为:\n");
for(i=0;i!=n;++i)
printf("%d ",a[i]);
printf("\n");
free(a);
}
这是排数字的,要排字母的话,只需把a的类型改一下,和输出输入的格式改一下就ok了
1、打开Visual stdio 2019软件新建空白c文件,在源文件处右击鼠标,选择添加下面的新建项,此时会弹出窗口:
2、弹出的窗口选择C++文件,将文件扩展名改为“.c”点击添加完成新建c文件,之后就可以编写程序了:
3、接下来就可以编写程序了,首先最前面的部分为输入数字的部分,之后的程序会对用户输入的数字就行排序,最后则是将结果打印出来。冒泡排序需要用到两层循环,第一层循环遍历数组中的元素,第二层则进行两两比较,如果顺序不对就要对其进行换位,直到排序完成:
4、最后执行程序观察结果,按下crtl+F5弹出程序,随意输入10个数,按下回车键执行结果,此时就可以看到排序后的结果了。以上就是c语言冒泡排序程序的演示:
冒泡法排序函数如下:
void bubble(int a[],int n)
{int i,j,t;
for(i=0;in-1;i++)/*共进行n-1轮*/
for(j=0;jn-1-i;j++)/*每轮在前n-i个数中比较*/
if(a[j]a[j+1]) /*若相邻元素逆序*/
{t=a[j]; a[j]=a[j+1];a[j+1]=t;}/*就交换*/
}
void sort(int *a, int left, int right)
{
if(left = right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i j) /*控制在当组内寻找一遍*/
{
while(i j key = a[j])
/*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升
序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/
{
j--;/*向前寻找*/
}
a[i] = a[j];
/*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是
a[left],那么就是给key)*/
while(i j key = a[i])
/*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,
因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/
{
i++;
}
a[j] = a[i];
}
a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/
sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/
sort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/
/*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/
}