冒泡排序的疑问和随想
以下两例均是冒泡排序。
例一对等长的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]);
}