重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
成都创新互联公司是网站建设技术企业,为成都企业提供专业的成都做网站、网站建设、外贸营销网站建设,网站设计,网站制作,网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制适合企业的网站。十余年品质,值得信赖!
#include string.h
struct student
{
char code[20];
char name[20];
int age;
char adress[30];
}stu[3];
int main( void )
{
int i, j;
struct student temp;
for( int k = 0; k 3; k++ ){
printf( "please input code%d:\n ", k + 1 );
scanf( "%s", stu[k].code );
scanf( "%s", stu[k].name );
scanf( "%d", stu[k].age );
scanf( "%s", stu[k].adress );
}
for( i = 0; i 3-1; i++ ){
for( j = i + 1; j 3; j++ )
if( strcmp( stu[i].code, stu[j].code) 0 ){
temp = stu[j];
stu[j] = stu[i];
stu[i] = temp;
}
}
printf( "排序成功!\n" );
for( i = 0; i 3; i++ ){
printf( "%s\t", stu[i].code );
printf( "%s\t", stu[i].name );
printf( "%d\t", stu[i].age );
printf( "%s\n", stu[i].adress );
}
return 0;
}
既然要用外行的话来回答,我就打个简单的比喻吧。
【比喻】
假如你是体育老师,你前面有一排随机站立的学生,10个,高矮不一。如果你要用冒泡排序的思路来让他们从低到高来排队,你可以这样。
第一遍:
从左往右,第一个跟第二个比较,高的那么换到右边,接着第2个跟第3个比较,高的再换到右边。这样以此类推,第一遍做完后,你能保证最高的那个被移动到了队列最后。比如说姚*明同学。
第二遍:
如果我是体育老师,姚*明可以去玩手机了(呵呵),因为,第一轮已经能保证他是最高的,且已经站到最后了。那么我只要对前9位同学,把第一遍的动作再做一遍,那么你就可以保证找出第2高的同学,移动到姚*明左边了。一次类推。
【短评】
所谓冒泡,就是模拟池塘里的小气泡。你可以假定小的往上跑的快,大的跑的慢。那么水底到水面上就形成了一串大小不同的泡泡。
【截图注释】
bubble_sort(A)//函数名叫冒泡排序,需要传入一个数组A作为参数
{
for(
i=1
to
N-1)//10个人,其实排9轮就好了,最后一轮就一个人不用排
{
haschang=false;//用一个逻辑性变量记录排序过程中是否有数据交换,开始为false
for(j=1
to
N-i)//每一轮要排序的人数是递减的,
i是递增,所以每一次内循环N-i递减
{
if(A[j]A[j+1])//如果A的第j个元素比后面那个大,就交换位置
{
temp=A[j];//先把A[j]做个备份
A[j]=A[j+1];//然后把A[j+1]装到A[j]中
A[j+1]=temp;//最后把原来备份的temp
放到A[j+1]
实现交换
haschange=true;//发生了数据交换,修改标识。
}
}
}
楼主好运。
vc 6.0运行通过-原创
#include "stdio.h"
#include "string.h"
#include "conio.h"
#define N 5
void main()
{
char *p[N]={"Java","Vi","C","D","Ada"};
char *ptemp;
int i,j;
printf("before arrangement:\n");
for(i=0;i5;i++)
printf("p+%d-%s\n",i,p[i]);
printf("\n");
for(j=0;j=N-2;j++)
{
for(i=0;i=N-j-1;i++)
{
if(strcmp(p[i],p[i+1])0) // *p[i] 表示第i个字符串的第一个字母
{ptemp=p[i];p[i]=p[i+1];p[i+1]=ptemp;}
}
}
printf("after arrangement:\n"); //加 );
for(i=0;iN;i++)
printf("p+%d-%s",i,p[i]);
getch(); // 要么改为 getchar(); 要么加头文件 "conio.h"
}
你好,很高兴为你解答
所谓冒泡排序即:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
代码为:
void sort(float a[],int n)
{
for(int i=1;in;i++)//第1到n-1趟
for(int j=0;jn-1;j++)//相邻两个数排序
if(a[j]a[j+1])
swap(a[j],a[j+1]);//swap为交换两个数的值的函数(这里省略没有给出)
}
不懂追问我,满意请采纳,谢谢
祝愉快
冒泡排序每一趟排序把最大的放在最右边。
比如:
87 12 56 45 78
87和12交换:12 87 56 45 78
87和56交换: 56 87 45 78
87和45交换: 45 87 78
87和78交换: 78 87
到此第一趟排序结束,接下来的每一趟排序都是这样。
#includestdio.h
void Print(int *num, int n)
{
int i;
for(i = 0; i n; i++)
printf("%d ", num[i]);
puts("\n");
return;
}
void Bubble_Sort(int *num, int n)
{
int i, j;
for(i = 0; i n; i++)
{
for(j = 0; i + j n - 1; j++)
{
if(num[j] num[j + 1])
{
int temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
Print(num, n);
}
}
return;
}
int main()
{
int num[8] = {87, 12, 56, 45, 78};
Bubble_Sort(num, 5);
return 0;
}
冒泡排序是排序算法的一种,思路清晰,代码简洁,常被用在大学生计算机课程中。“冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。这里以从小到大排序为例进行讲解。基本思想及举例说明
冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较就,选出最大的数;经过第2轮比较,就选出次大的数,以此类推。下面以对 3 2 4 1 进行冒泡排序说明。
1.这个算法用rand函数产生新的要排序的数据,与已有的有序数列中的数据依次比较,如果遇到比他大的数据,就从该数据开始,一直交换到末尾,达到一个插入的效果。从而形成有序的数列。
2.此外,只用rand函数并不能达到真正随机的效果。如果要实现真正随机的效果,还要配合srand函数才行。
3.具体代码如下:#include "stdio.h"#include "stdlib.h"void main(){int a[10],temp,r; printf("请输入一个种子\n"); scanf("%d",r);srand(r); for(int i=0;i9;i++) 。