C语言使用指针实现选择法排序。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言使用指针实现选择法排序。相关的知识,希望对你有一定的参考价值。
#include<stdio.h>
int main()
int i,k,a,j,s=0,b,t;
int *p=&a;
int *q=&b;
for(i=0;i<5;i++)
scanf("%d",p++);
p=&a;
for(j=5;j>0;j--)
for(k=0;k<5;k++)
if(b<=*(p+k))
b=*(p+k);
q=&b;
for(t=0;t<5;t++)
printf(" %d",*(q+t));
getchar();
getchar();
不知道该怎么改呢。
#include<stdio.h>
voidprint_result(float*,int);
voidSelect_Sort(float*,int);
intmain()
{
inti;
floatarray[10];
float*pointer;
printf("请输入10个数:\n");
for(i=0;i<10;i++)
{
scanf("%f",&array[i]);
}
pointer=array;
Select_Sort(pointer,10);
print_result(pointer,10);
return0;
}
voidprint_result(float*p,intn)
{//输出结果
intk;
for(k=0;k<n;k++)
{
printf("%g\t",*(p+k));
}
}
voidSelect_Sort(float*pt,intn)
{//全用指针的选择排序法
inti,j,k;
floattempnum;
for(i=0;i<n;i++){
k=i;
for(j=i+1;j<n;j++)
{
if(*(pt+j)>*(pt+i))
{
k=j;
}
}
tempnum=*(pt+i);
*(pt+i)=*(pt+k);
*(pt+k)=tempnum;
}
}
扩展资料:
其它方法:
voidSelectSort(intarr[],intn)
{
printf("\n选择排序法过程:\n");
inti,j,k,l,t;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(arr[j]<arr[k])
{
k=j;
}
}
if(k!=i)
{
t=arr[i];arr[i]=arr[k];arr[k]=t;
}
for(l=0;l<n;l++)
{
printf("%3c",arr[l]);
}
printf("\n");
}
}
参考技术A/*
65 45 85 25 95
25 45 65 85 95
Press any key to continue
*/
#include <stdio.h>#define N 5
int main()
int t,a[N];
int *p,*q,*k;
for(t = 0;t < N;++t)
scanf("%d",&a[t]);
for(p = a; p < a + N - 1;++p)
k = p;
for(q = p + 1;q < a + N;++q)
if(*k > *q) k = q;
if(p != k)
t = *p;
*p = *k;
*k = t;
for(t = 0; t < N; ++t)
printf("%d ",*(a + t));
printf("\\n");
return 0;
参考技术B #include<stdio.h>
int main()
int i,k,a[5],j,s=0,b,t;
int *p=a;
for(i=0;i<5;i++)
scanf("%d",p++);
p=a;
for(j=4;j>=0;j--)
t=0;
for(k=1;k<=j;k++)
if(*(p+t)>=*(p+k))
t=k;
b=*(p+t);
*(p+t)=*(p+j);
*(p+j)=b;
p=a;
for(i=0;i<5;i++)
printf(" %d",*(p+i));
getchar();
getchar();
所谓的选择排序法,是从N个中选择一个最小(或最大)的与第i位进行替换,i在整个循环中递增。下一次则从剩余的数中在选取一个最小(或最大)的与第i+1位进行替换。
你的数组与指针概念仍需要多多理解
本回答被提问者采纳 参考技术C #includeint main()
int i,k,a[5],j,s=0,b,t;
int *p=a;
for(i=0;i<5;i++)
scanf("%d",p++);
p=a;
for(j=4;j>=0;j--)
t=0;
for(k=1;k<=j;k++)
if(*(p+t)>=*(p+k))
t=k;
b=*(p+t);
*(p+t)=*(p+j);
*(p+j)=b;
p=a;
for(i=0;i<5;i++)
printf(" %d",*(p+i));
getchar();
getchar();
所谓的选择排序法,是从N个中选择一个最小(或最大)的与第i位进行替换,i在整个循环中递增。下一次则从剩余的数中在选取一个最小(或最大)的与第i+1位进行替换。
你的数组与指针概念仍需要多多理解 参考技术D int selection sort(int[a],int [b]);
for(int i=0;i<b;i++)
int mix=0
for(int j=i+1;j<a;j++)
if(a[mix]>a[j])
mix=j;
int temp=a[mix];
a[mix]=a[i];
a[i]=temp;
return 0
viod main()
int a[]=" "
int b= ;
int c[]=(a,b);
printf( );
C语言指针选择法排序问题
这么写排序没有作用!请问哪儿不对啊? 囧……我没财富值了。
参考技术A #include<stdio.h>void swaped(int *a,int *b)
*b=(*a)+(*b);
*a=(*b)-(*a);
*b=(*b)-(*a);
void main()
int i,*p1,*p2,*k,t,a[10];
//数据输入
for(p1=a;p1<a+10;p1++) scanf("%d",p1);
//选择法排序(升序)
for (i=0,p2=a;p2<a+9,i<9;p2++,i++)
for (p1=a+i+1;p1<a+10;p1++) if(*p2>*p1) swaped(p2,p1);
//数据输出
for (p2=a;p2<a+10;p2++) printf("%d ",*p2);
printf("\\n");
参考技术B for(int i = 0; i < 10 -1; i++)
for(int x = 0; x < 10-i-1; i++)
if(a[x] > a[x+1])
temp = a[x];
a[x] = a[x+1];
a[x+1] = temp;
//冒泡排序
你的第三个循环是错的,换值要在if语句里面追问
那是选择法排序啊- -,能给写一下吗? 另外你用是什么软件啊?好像比VC++6.0好使。
参考技术C for(p1=a+i+1;p1<a+10;p1++)if(*k>*p1)
k=p1;
if(k!=a+i)
t=*k;
*k=*(a+i);
*(a+i)=t;
追问
能说下为什么要加这一句 吗? :if(k!=a+i)
另外你用的什么软件啊?我是初学者用的vc++6.0 不好用,win7的系统经常出问题。
k被变动过,k不是开始的a+i了,所以交换他们的值。
挑个自己喜欢的文本编辑器vim/emacs/sublimetext/notepad++
然后弄个win的gcc,mingw或者直接弄个codeblocks
以上是关于C语言使用指针实现选择法排序。的主要内容,如果未能解决你的问题,请参考以下文章