1. c语言怎样通过函数调用实现选择排序法
c语言通过函数调用实现选择排序法:
1、写一个简单选择排序法的函数名,包含参数。int SelectSort(int * ListData,int ListLength);
2、写两个循环,在循环中应用简单选择插入排序:
int SelectSort(int * ListData,int ListLength)
{
int i , j ;
int length = ListLength;
for(i=0;i<=length-2;i++)
{
int k = i;
for(j=i+1;j<=length-1;j++)
{
if(ListData[k]>ListData[j])
{
k=j;
}
}
if(k!=i)
{
int tmp = ListData[i];
ListData[i] = ListData[k];
ListData[k] = tmp;
}
}
return 0;
}
4、简单选择排序中,需要移动的记录次数比较少,主要的时间消耗在对于数据的比较次数。基本上,在比较的时候,消耗的时间复杂度为:n*n。
2. c语言——选择排序
递归版
#include<stdlib.h>
#include<stdio.h>
#define arrSize 1000
void RecurSelectSort(int a[], int n, int i);
main()
{
int a[arrSize], i, n;
printf("Please input the number of integers:"); /* 打印提示信息 */
scanf("%d", &n); /* 读取字符串长度 */
printf("Please input the integers:"); /* 打印提示信息 */
/* 读取数组元素 */
for(i=0;i<n;i=i+1){
scanf("%d", &a[i]);
}
/* 进行升序函数调用 */
for(i=0;i<n;i=i+1){
RecurSelectSort(a, n, i);
}
/* 打印数组元素 */
for(i=0;i<n;i=i+1){
printf("%d ", a[i]);
}
printf("\n"); /* 换行 */
system("pause");
}
void RecurSelectSort(int a[], int n, int i)
{
int b, max;
if(n==1){
if(a[n-1]>a[n]){
max=a[n-1];
a[n-1]=a[n];
a[n]=max;
}
}
else{
if(a[n-2]>a[n-1] && n>2){
b=a[n-1];
a[n-1]=a[n-2];
a[n-2]=b;
}
RecurSelectSort(a, n-1, i);
i=0;
}
}
3. C语言,用函数实现选择排序,对C纯菜鸟
程序比较凌乱,不过分成函数写的思想倒还可以,注意自己定义的变量,大小写对应的是不同的变量(compare里面),而且你的看起来更像是直接排序;主函数里面应该先初始化数组在排序,顺序很关键
4. C语言选择排序法
人家的效率高,交换次数少。比如3、2、1三个数。
你是第一轮3和2换变成2、3、1,再2和1换,变成1、3、2,第二轮3和2换变成1、2、3
他的是第一轮从后面选一个比3小的最小的数,K保存这个数的下标,先k是1,再k是2,一轮循环玩了才3和1交换,变成1、2、3,第二轮不交换。
你的算法没轮交换次数不定,看数据,他的每轮最多交换一次,特别是数据多时用他的效率高很多,因为给K赋值比交换快很多
5. 编写函数,使用选择排序法对数组进行排序(用C语言)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
intmain(void)
{
inta[10],i,j,tmp,b;
srand(time(NULL));
for(i=0;i<10;i++)
a[i]=rand()%100;
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf(" ");
for(i=0;i<9;i++)
{
tmp=i;
for(j=i+1;j<10;j++)
{
if(a[tmp]>a[j])
tmp=j;
}
if(i!=tmp)
{
b=a[tmp];
a[tmp]=a[i];
a[i]=b;
}
}
for(i=0;i<10;i++)
printf("%3d",a[i]);
printf(" ");
return0;
}
随机产生数组中的元素, 更合理一些。 网络中有各种版本。
6. C语言,编写一个函数,函数是用选择排序法将数组排序
#include<stdio.h>
void px(int a[])
{
int i,temp,j;
for(i=0;i<10;i++)
{
for(j=i;j<10;j++)
{
if(a[i]<=a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
void main()
{
int i,a[10];
for(i=0;i<10;i++)
{
printf("成绩:");
scanf("%d",&a[i]);
}
px(a);
for(i=0;i<10;i++)
{
printf("%d",a[i]);
printf("\n");
}
}
你的错误有点多,px(10)该改成px(a),还有for语句少打了括号,还有for语句里面的i和p的初值都应该为0,而你的是1,编程序的时候要注意代码的格式 排版 不然很难找错的 就像你的for语句少打了括号一样 自己写完了都不容易看出来
还有你那px函数里面的变量声明了太多,没必要 代码看起来要简单 可读性才强
我帮你把没必要的删了 看起来更舒服
7. c语言用指针写选择法排序函数
你的程序没错,只不过这不是选择法,是冒泡发,选择发如下:
void
sort(int
*a,int
n)
{
int
i,j,t,temp;
for(i=0;i<n-1;i++)
{
t=i;/初始定义t为未排序数的第一个
for(j=i+1;j<n;j++)
{
if(*(a+t)<*(a+j))/挑选出更大的数的位置,把他赋给t
t=j;
}
temp=*(a+i);
/t是最大的那个数的位置,把他和未排序的第一个交换位置
*(a+i)=*(a+t);
*(a+t)=temp;
}
}
main()
{
int
i,a[10],*p=a;
printf("input
zhe
array
a:\n");
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
p=a;
sort(p,10);
p=a;
printf("zhe
sort
array
is:\n");
for(i=0;i<10;i++)
printf("%d,",a[i]);
getch();
}
8. c语言,使用函数的选择法排序
voidselectionsort(inta[],intm)
{
inti,j;
intk;
inttmp;
for(i=0;i<m-1;i++)//控制循环次数,n个数需要n-1次循环
{
k=i;
for(j=i+1;j<m;j++)
{
if(a[j]<a[k])
k=j;
}
//i不等于k是就证明a[i]不是最小的,
//i等于k时证明a[i]就是本轮比较过程中最小的值
if(i!=k)
{
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
}
9. c语言选择排序法
外面的for循环,依次从队列中取出一个数用来比较
里面的for循环,用来比较上面选择的数据与后面的每个数据。
10. C语言选择法排序
#include<stdio.h>
#defineM 5
void main()
{
int b[M],i,j,t,k;
for(i=0;i<M;i++)
scanf("%d",&b[i]);
for(i=0;i<M-1;i++)
{
for(k=i,j=i+1;j<M;j++)
if(b[k]<b[j])
k=j;
if(i!=k)
{
t=b[i];
b[i]=b[k];
b[k]=t;
}
}
for(i=0;i<M;i++)
printf("%d ",b[i]);
}
错在大括号位置加错了。
代码:
#include<stdio.h>
void SelectionSort(int *num,int n)
{
int i = 0;
int min = 0;
int j = 0;
int tmp = 0;
for(i = 0;i < n-1;i++)
{
min = i;//每次讲min置成无序组起始位置元素下标
for(j = i;j < n;j++)//遍历无序组,找到最小元素。
{
if(num[min]>num[j])
{
min = j;
}
}
if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置
{
tmp = num[min];
num[min] = num[i];
num[i] = tmp;
}
}
}
(此处空一行)
int main()
{
int num[6] = {5,4,3,2,9,1};
int i = 0;
SelectionSort(num,6);//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。
for(i = 0;i < 6;i++)
{
printf("%d ",num[i]);
}
return 0;
}