刘绍喜女儿刘绍香:TC编写的指针问题

来源:百度文库 编辑:高校问答 时间:2024/05/03 03:17:45
如果给定一个一维数组,里面含10个元素,要用指针的方法对着10个元素由小到大排列,大家能告诉我该怎样编写代码吗?

使用冒泡法排序(快速排序法有点难度,也可以吧,能看懂就看,要用递归)

#include<stdio.h>
void main(){
int s[10]={8,7,10,22,5,12,18,25,19,2};
int *p,i,j,temp;

for(j=0;j<9;j++){
p=s;
for(i=0;i<9-j;i++,p++){
if (*p>*(p+1)){
temp=*p;
*p=*(p+1);
*(p+1)=temp;
}
}
}
p=s;
for(i=0;i<10;i++)
printf("%d,",*p++);
}

其实用指针或数组下标其实是一回事,没区别的,我感觉。

快速排序用指针实现。

/*快速排序
基本思想:通过一次排序将数组分成独立的两部分,其中一部分数组的元素均比另一部分
数组的元素小,则可分别对这两部分数组继续进行排序,以达到整个数组有序。

按降序排列

*/

#include<stdio.h>
#define N 14
void qksort(int *,int *);

void main(){
int m[]={255,5,110,49,23,88,12,38,49,49,97,76,13,1};
int *s,*t,x,k;
s=&m[0];t=&m[N-1];
qksort(s,t);//快速排序
for(x=0;x<N;x++)
printf("%d,",m[x]);//排序后的数列显示出来
printf("请输入要查找的数:");
scanf("%d",&k);
binsrch(m,k);

}

void qksort(int *s,int *t){
int *i,*j,*temp,x;

i=s;j=t;x=*i;
while (i<j){
while ((i<j)&&(*j<=x))
j--;
*i=*j;
while ((i<j)&&(*i>=x))
i++;
*j=*i;
}
*i=x;temp=i;

if (temp-1>s) //加判断的原因是特殊情况存在,就是如果标记的数的位置最后经过一次排序就在S处(第一个),将处于死循环
qksort(s,temp-1);
if (temp+1<t) //同样一次排序后,元素的位置在t时,也会出现无修止的运算
qksort(temp+1,t);

}

厉害,晕厥中...................