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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中选择排序法具体是怎样的?相关的知识,希望对你有一定的参考价值。

参考技术A 每次从未排序的数字中选择最小的,与未排序的第一个交换,直到剩一个为止
例子:
(3
5
4
1
2
)
选择最小为1,与3交换
1
(5
4
3
2)
从剩余的选择最小为2
,与5交换
1
2
(4
3
5)
选择最小为3
与4交换
1
2
3
(4
5)选择最小为4
,它就是未排序第一个,不交换
1
2
3
4
(5)
只剩一个了,结束
参考技术B 第一次循环找到所有数中最小的一个,选择这个最小的数,和第一个进行位置交换,第二次循环时从第二个数开始查找,找到其中最小的与第二个进行位置交换,依此类推。

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

#include<stdio.h>
void main()

void inv(int * x,int n);
int i,* a,b[10];
a=b;
printf("please input array a\n");
for(i=0;i<10;i++)
scanf("%d",a++);
printf("\n");
a=b;
inv(a,10);
for(i=0;i<10;i++)
printf("%d ",* a++);
printf("\n");

void inv(int * x,int n)

int * i,* j,* k,temp;
for(i=x;i<x+n-1;i++)

k=i;
for(j=x+1;j<(x+n);j++)
if(* j>* k) k=j;//问题处
if(k!=i)
temp=* k;* k=* j;* j=temp;


此程序的倒数第5行中"k=j"指针变量对指针变量赋值对吗?要怎么改呀?

参考技术A k=j没问题,问题在别的地方

void inv(int * x,int n)

int * i,* j,* k,temp;
for(i=x;i<x+n-1;i++)

k=i;
for(j=i+1;j<(x+n);j++) //j=i+1不是x+1
if(* j>* k) k=j;//问题处
if(k!=i)
temp=* k;* k=* i;* i=temp; //这里交换k,i指向的值,不是j指向的值

本回答被提问者采纳

以上是关于C语言中选择排序法具体是怎样的?的主要内容,如果未能解决你的问题,请参考以下文章

C语言选择排序法

C语言之快速排序法

C语言 | 选择法排序

C语言:用选择法对10个整数排序

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

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