数据结构-冒泡排序
冒泡排序的思想:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
代码:
#include<stdio.h>
int main()
{
int a[100];
int n,temp,i,j;
printf("Enter n:");
scanf("%d",&n);
printf("Enter %d integer:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++){
for(j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
printf("After sorted:");
for(i=0;i<n;i++)
printf("%4d",a[i]);
printf("\n");
return 0;
}
/*输出示例:
Enter n:8
Enter 8 integer:1 5 5 82 45 95 15 43
After sorted: 1 5 5 15 43 45 82 95
请按任意键继续. . .
Enter n:10
Enter 10 integer:25 1 52 69 5 96 -77 59 123 -960
After sorted: -960 -77 1 5 25 52 59 69 96 123
请按任意键继续. . .
*/
int main()
{
int a[100];
int n,temp,i,j;
printf("Enter n:");
scanf("%d",&n);
printf("Enter %d integer:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++){
for(j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
printf("After sorted:");
for(i=0;i<n;i++)
printf("%4d",a[i]);
printf("\n");
return 0;
}
/*输出示例:
Enter n:8
Enter 8 integer:1 5 5 82 45 95 15 43
After sorted: 1 5 5 15 43 45 82 95
请按任意键继续. . .
Enter n:10
Enter 10 integer:25 1 52 69 5 96 -77 59 123 -960
After sorted: -960 -77 1 5 25 52 59 69 96 123
请按任意键继续. . .
*/
2.算法改进(如果某一趟排序数据没有发生交换,说明序列当前已经是排好序了)。
#include<stdio.h>
int main()
{
int a[10];
int i,j,tem;
bool bchange = false;
printf("Please input 10 numbers:\n");
for(i = 0;i<10;i++)
{
scanf("%d",&a[i]);
}
//Bubble
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
bchange = false;
if(a[j]>a[j+1])
{
tem = a[j];
a[j] = a[j+1];
a[j+1] = tem;
bchange = true;
}
}
if(!bchange)//not change
break;
}
printf("The sorted numbers:\n");
for(i = 0;i<10;i++)
{
printf("%3d",a[i]);
}
printf("\n");
return 0;
int main()
{
int a[10];
int i,j,tem;
bool bchange = false;
printf("Please input 10 numbers:\n");
for(i = 0;i<10;i++)
{
scanf("%d",&a[i]);
}
//Bubble
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
bchange = false;
if(a[j]>a[j+1])
{
tem = a[j];
a[j] = a[j+1];
a[j+1] = tem;
bchange = true;
}
}
if(!bchange)//not change
break;
}
printf("The sorted numbers:\n");
for(i = 0;i<10;i++)
{
printf("%3d",a[i]);
}
printf("\n");
return 0;
}