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 #include
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位进行替换。
你的数组与指针概念仍需要多多理解
参考技术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语言使用指针实现选择法排序。的主要内容,如果未能解决你的问题,请参考以下文章

c语言:指针 用选择法对10个整数由大到小顺序排序

c语言用指针写选择法排序函数

C语言中选择排序法具体是怎样的?

c语言编程题 利用指针编写函数用选择法对整数数组排序(降序)。 求大神帮忙啊!!!谢谢

C语言选择排序法

基于python语言的经典排序法(冒泡法和选择排序法)