接下来介绍几种排序和查找方式,掌握冒泡,选择,和快排
-----------------------------------------------------------------------------
【程序66】 题目:对10个数进行排序 1.程序分析:可以利用冒泡, 2.程序源代码:
#include
void main()
{
int i,j,temp;
int a[]={3,2,8,6,4,9,0,1,5,7};
for(i=0;i<10;i++)
{
for(j=0;j<10-i;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("/n");
} -----------------------------------------------------------------------------
【程序67】 题目:对10个数进行排序 1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
2.程序源代码: #include
void main()
{
int i,j,temp,min;
int a[]={3,2,8,6,4,9,0,1,5,7};
for(i=0;i<9;i++)
{
min=i;
for(j=i+1;j<10;j++)
if(a[min]>a[j])min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("/n");
}
-----------------------------------------------------------------------------
【程序68】 题目:对10个数进行排序 1.程序分析:快速排序 2.程序源代码: #include
void Qsort(int p[],int beg,int end)
{
int i=beg,j=end;//和j用来确定还需要判断排序的范围上下标
int m=i; /*记录基准点*/
int temp;
if(beg
{
while(i
{
for(;j>m;j--) /*对基准数右边扫描*/
{
if(p[j]
{
temp=p[j];
p[j]=p[m]; /*进行交换*/
p[m]=temp;
m=j;break;/*确定交换后的基准数,跳出循环*/
}
}
i++; /*往右推*/
for(;i
{
if(p[i]>p[m])/*如果左边有比基准数大的*/
{
temp=p[i];
p[i]=p[m];
p[m]=temp;
m=i;break; /*交换后的基准点*/
}
}
j--;/*往左推*/
}/*执行完后,比基准点小的都在左边,比基准点大的都在右边了*/
Qsort(p,beg,m-1);; /*对左边比基准点小的再次进行排序*/
Qsort(p,m+1,end); /*对右边比基准点大的再次执行上面的排序方法*/
} /*直到只剩下要排序一个数为止,此时整个数组已经排序好了*/
}
int main()
{
int i,a[]={3,2,8,6,4,9,0,1,5,7};
Qsort(a,0,9);
for(i=0;i<10;i++)printf(" %d ",a[i]);
putchar('/n');
return 0;
}
-----------------------------------------------------------------------------
【程序69】 题目:对10个数进行排序 1.程序分析:快速排序(调用库函数) 2.程序源代码:
#include
#include int cmp(const void *a, const void *b)
{
return(*(int *)a-*(int *)b);/*这里的(int *)a定义了一个指向int型的指针,注意int *两边的括号不能少,然后(int *)a前面加上*就表示取其指向的值。这里返回的是*(int *)a-*(int *)b,两个数相减的顺序跟函数形参顺序一样这样就会将数组按升序排序,反之如果是return(*(int *)b-*(int *)a),就会将数组按降序排列*/
}
void main()
{
int i,a[]={3,2,8,6,4,9,0,1,5,7};
qsort(a,10,sizeof(a[0]),cmp);
for(i=0;i<10;i++)
printf("%d",a[i]);
putchar('/n');
}
-----------------------------------------------------------------------------
【程序70】 题目:折半查找
1.程序分析: 2.程序源代码:
#include
#include
int cmp(const void *a,const void *b)
{
return(*(int*)a-*(int*)b);
}
void main()
{
int i,x,start,end,a[]={3,2,8,6,4,9,0,1,5,7,12,14,16,17,19};
qsort(a,10,sizeof(a[0]),cmp);
x=12;
for(start=0,end=14;start<=end;)
{
i=start+(end-start)/2;
if(x==a[i])
{
printf("%d/n",i+1);
return ;
}
else if(x
else start=i+1;
}
}