冒泡排序的疑问和随想
以下两例均是冒泡排序。
例一对等长的10个串排序,例二对不等长的串排序。例三是书里的示例。
问题:
1.我对冒泡的两个for循环不太理解,是否可以和我解释一下?那个循环到底是什么意思呢?
2.例一中第二个for循环是到j<=9-i而例二中则是j<=8-i我起先写例一时以为这样没问题运行也正常直到写例二时发现好像应该变成8-i才对。可为什么两个程序的运行都没有出错(溢出)?如果说例一中也应该是8-i,那程序为什么不会出错?而例二中改成8-i就会出错?
3.问题由第一问展开,例三中计数从1开始,现在我假设,计数从m开始,总共有n个数,那么形状犹如下面这种中间应该怎么填呢?
for(i=m;i<=____;i++)
for(j=m;j<=____;j++)
==================
-例一-------------
#include <stdio.h>
#include <string.h>
void print(char *ptStr[])
{
int i;
for (i=0;i<10;i++)
puts(ptStr[i]);
}
void sort (char *pString[])
{
char *ps;
int i,j;
for (i=0;i<=8;i++)/*10个串比较,冒泡排序*/
for(j=0;j<=10-i-1;j++)
if (strcmp(pString[j],pString[j+1])>0)
{
ps=pString[j];pString[j]=pString[j+1];pString[j+1]=ps;
}
}
void main()
{
char *pStr[10]={"China","Japan","Korea","Egypt","Nepal","Burma","Ghana","Sudan","Italy","Libya"};
puts("The 10 strings are:");
print(pStr);
sort (pStr);
puts("The sorted strings are:");
print(pStr);
}
-例二-----------
#include <stdio.h>
#include <string.h>
void print(char *ptStr[])
{
int i;
for (i=0;i<10;i++)
puts(ptStr[i]);
}
void sort (char *pString[])
{
char *ps;
int i,j;
for (i=0;i<=8;i++)/*10个串比较,冒泡排序*/
for(j=0;j<=8-i;j++)
if (strcmp(pString[j],pString[j+1])>0)
{
ps=pString[j];pString[j]=pString[j+1];pString[j+1]=ps;
}
}
void main()
{
int i;
char *pStr[10];
char arr[10][20];
for(i=0;i<10;i++)pStr[i]=arr[i];
puts("Input the string:");
for (i=0;i<10;i++)
gets(pStr[i]);
puts("The 10 strings are:");
print(pStr);
sort (pStr);
puts("The sorted strings are:");
print(pStr);
}
-例三--------------
#include <stdio.h>
void main()
{
int a[11];
int i,j,t;
printf("input 10 numbers:\n");
for (i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=1;j<=9;j++)
for(i=1;i<10-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers:\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
}
例一对等长的10个串排序,例二对不等长的串排序。例三是书里的示例。
问题:
1.我对冒泡的两个for循环不太理解,是否可以和我解释一下?那个循环到底是什么意思呢?
2.例一中第二个for循环是到j<=9-i而例二中则是j<=8-i我起先写例一时以为这样没问题运行也正常直到写例二时发现好像应该变成8-i才对。可为什么两个程序的运行都没有出错(溢出)?如果说例一中也应该是8-i,那程序为什么不会出错?而例二中改成8-i就会出错?
3.问题由第一问展开,例三中计数从1开始,现在我假设,计数从m开始,总共有n个数,那么形状犹如下面这种中间应该怎么填呢?
for(i=m;i<=____;i++)
for(j=m;j<=____;j++)
==================
-例一-------------
#include <stdio.h>
#include <string.h>
void print(char *ptStr[])
{
int i;
for (i=0;i<10;i++)
puts(ptStr[i]);
}
void sort (char *pString[])
{
char *ps;
int i,j;
for (i=0;i<=8;i++)/*10个串比较,冒泡排序*/
for(j=0;j<=10-i-1;j++)
if (strcmp(pString[j],pString[j+1])>0)
{
ps=pString[j];pString[j]=pString[j+1];pString[j+1]=ps;
}
}
void main()
{
char *pStr[10]={"China","Japan","Korea","Egypt","Nepal","Burma","Ghana","Sudan","Italy","Libya"};
puts("The 10 strings are:");
print(pStr);
sort (pStr);
puts("The sorted strings are:");
print(pStr);
}
-例二-----------
#include <stdio.h>
#include <string.h>
void print(char *ptStr[])
{
int i;
for (i=0;i<10;i++)
puts(ptStr[i]);
}
void sort (char *pString[])
{
char *ps;
int i,j;
for (i=0;i<=8;i++)/*10个串比较,冒泡排序*/
for(j=0;j<=8-i;j++)
if (strcmp(pString[j],pString[j+1])>0)
{
ps=pString[j];pString[j]=pString[j+1];pString[j+1]=ps;
}
}
void main()
{
int i;
char *pStr[10];
char arr[10][20];
for(i=0;i<10;i++)pStr[i]=arr[i];
puts("Input the string:");
for (i=0;i<10;i++)
gets(pStr[i]);
puts("The 10 strings are:");
print(pStr);
sort (pStr);
puts("The sorted strings are:");
print(pStr);
}
-例三--------------
#include <stdio.h>
void main()
{
int a[11];
int i,j,t;
printf("input 10 numbers:\n");
for (i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=1;j<=9;j++)
for(i=1;i<10-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers:\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
}
...全文
相关推荐
代码随想录算法PDF.rar
代码随想录算法PDF.rar
冒泡排序(超详细)
1、什么是冒泡排序? 冒泡排序的英文Bubble Sort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。 冒泡排序的原理: 每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去。如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n-1 趟操作。 而 “每一趟 ” 都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面
【第39天】实现一个冒泡排序
【第39天】实现一个冒泡排序
代码随想录算法PDF.zip
代码随想录算法PDF.zip
代码随想录的pdf版本,需要准备秋招的小伙伴们看过来呀!
代码随想录的pdf版本,不知道为啥放在电脑上面光删除不掉,所以网上保存一下下!


