C语言:用选择排序法对一个数组里的数进行排序,从小到大,要求选出小的进行排序

C语言:用选择排序法对一个数组里的数进行排序,从小到大,要求选出小的进行排序,第1张

这样:

int a = (int )malloc(sizeof(int) n); //动态分配数组空间 ,有几个元素,n就是几。

for(i=0; i<n; i++)

{

a[i]=录入数值;

}

Sort(a, n);

for(j=0; j<n; j++)

{

printf("%d",a[ij);//输出的内容就是排序好了的

}

//下面方法是用来排序的

void Sort(int a, int n)

{

int i, j, temp;

for(i=0; i<n; i++)

{

for(j=i; j<n; j++)

{

if(a[i] > a[j])

{

temp = a[i];

a[i] = a[j];

a[j] = temp;

}

}

}

扩展资料:

注意事项

1、选择排序法是将序列分为两段,有序前列和无序后列,每次查找无序后列中最大元素,将其插入到有序前列的最末尾处,直至无序后列最后一个元素,最终排序后的序列为降序序列。

2、适用于包括数组和向量在内的序列。

3、选择排序与冒泡排序的区别是选择排序每次遍历时会记住最大元素的位置,只进行一次交换,而冒泡排序每次遍历时会交换两个顺序不合法的元素。

算法程序:

#include "stdafxh"

#include<iostream>

using namespace std;

void SelectSort(int A[],int n)

{

for(int i = 0;i < n;i++ )

{

int max =i;

for(int j = i+1;j < n;j++) //查找最大元素所在位置

{

if (A[j] > A[max])

max =j;

}

int temp = A[max];  //交换无序后列中首元素与最大元素的位置

A[max] = A[i];

A[i] = temp;

}

}

用选择排序法编写c语言,实现从键盘上输入10个数,按从大到小的顺序排序输出。代码如下:

#include<stdioh>

int main()

{

int i,j,a[10],t;

printf("输入数");

for (i = 0; i < 10; i++)

scanf("%d",&a[i]);

for (i = 0; i < 10; i++)

{

for (j = i + 1; j < 10;j++)

if (a[i] < a[j]){

t = a[i];

a[i] = a[j];

a[j] = t;

}

}

printf("从大到小");

for (i = 0; i < 10; i++)

printf("%2d", a[i]);

return 0;

}

扩展资料:

代码还可以设计,如下:

#include<stdioh>

int main()

{

int a[10],i,j,t;//定义数组;

for(i=0;i<10;i++){

scanf("%d",&a[i]);//给数组赋值;

}

for(i=0;i<9;i++)//10个数,进行9轮比较;

for(j=0;j<10-i;j++){//第一个数比较9次,依次递减;

if(a[j]>a[j+1]) {//交换值;

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

}

for(i=0;i<10;i++){

printf("%d\n",a[i]);//输出数组的值;

}

return 0;

}

}

printf("the sorted numbers:\n");

for(i=0;i<10;i++)

printf(" %d",a[i]);

printf("\n");

}

参考资料:

百度百科-printf

排序如下:

void SelectSort(RecordType r[], int length) /对记录数组r做简单选择排序,length为待排序记录的个数/

{    int temp;    for ( i=0 ; i< length-1 ; i++) //n-1趟排序    {        int index=i; //假设index处对应的数组元素是最小的        for (int j=i+1 ; j < length ; j++)  //查找最小记录的位置            if (r[j]key < r[index]key )                index=j;        if ( index!=i)  //若无序区第一个元素不是无序区中最小元素,则进行交换        {            temp     = r[i];            r[i]     = r[index];            r[index] = temp;        }    }}

初始序列:{49 27 65 97 76 12 38}第1趟:12与49交换:12{27 65 97 76 49 38}第2趟:27不动 :12 27{65 97 76 49 38}第3趟:65与38交换:12 27 38{97 76 49 65}第4趟:97与49交换:12 27 38 49{76 97 65}第5趟:76与65交换:12 27 38 49 65{97 76}第6趟:97与76交换:12 27 38 49 65 76 97 完成

选择排序法 是对 定位比较交换法(也就是冒泡排序法) 的一种改进。选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。

简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

下面也写个例子:

由大到小时:

int main(void){    int a[10];    int i,j,t,k;    for ( i = 0; i < 10; i ++ ) scanf("%d",&a[ i ]); /输入10个数,比武报名,报名费用10000¥ ^_^/    for ( i = 0;i < 9;i ++ ) /10个数,所以只需比9次/    {        k = i; /裁判AND记者实时追踪报道比赛情况/        for ( j = i + 1; j < 10; j ++)            if ( a[ k ] < a[ j ] ) k = j; /使a[k]始终表示已比较的数中的最大数/        if (k!=i)        {             t = a[ i ]; a[ i ] = a[ k ]; a[ k ] = t;        } / t 发放奖品 /    }    for( i = 0; i < 10; i ++) printf("%4d",a[ i ]); /显示排序后的结果/    return 0;}

由小到大时:

int main(void){    int a[10];    int i,j,t,k;    for ( i = 0; i < 10; i ++ ) scanf("%d",&a[ i ]); /输入10个数,比武报名,报名费用10000¥ ^_^/    for ( i = 0; i < 9; i ++ )    {        k = i; /裁判AND记者实时追踪报道比赛情况/        for ( j = i + 1; j < 10; j ++)            if ( a[ k ] > a[ j ] ) k = j;        if (k!=i)        {            t = a[ i ]; a[ i ] = a[ k ]; a[ k ] = t;        }/ t 发放奖品/    }        for( i = 0; i<= 9; i ++) printf("%4d",a[ i ]); /显示排序后的结果/return 0;}

#include<stdioh>

int main()

{ int a[6],max,min,i,j,ma,mi,t,mid;

for(i=0; i<6; i++)

{ scanf("%d",&a[i]);

}

for(i=0; i<3; i++)

{ min=a[i];

  max=a[i];

  for(j=i,mi=i,ma=i; j<6-i; j++)

  { if(a[j]<min)

    { min=a[j];

      mi=j;

    }

    if(a[j]>max)

    { max=a[j];

      ma=j;

    }

  }

  t=a[i];

  a[i]=a[mi];

  a[mi]=t;

  if(ma==i)ma=mi; //增加了这一行

  mid=a[5-i];

  a[5-i]=a[ma];

  a[ma]=mid;

}

for(i=0; i<6; i++)

{ printf("%d",a[i]);

  printf(" ");

}

return 0;

}

选择排序(Selection sort)是一种简单直观的排序算法。工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

以下是一个实现选择排序的例子:

#define SWAP(x, y, t)  ((t) = (x), (x) = (y), (y) = (t))

 //将list中的n个数据,通过选择排序算法排序。

void selete_sort(int list[], int n)

{

    int i, j, min, temp;

    for (i = 0; i < n - 1; i++){

        min = i;

        for (j = i + 1; j < n; j++)//找出最小元素的下标。

            if (list[j] < list[min])

                min = j;

        SWAP(list[i], list[min], temp);//交换最小元素到当前起始位置。

    }

}

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;

}

3、对编好的程序进行测试,得出测试结果:

int main()

{

int TestData[5] = {34,15,6,89,67};

int i = 0;

printf("排序之前的结果\n");

for(i = 0;i<5;i++)

printf("|%d|",TestData[i]);

int retData = SelectSort(TestData,5);

printf("排序之后的结果:\n");

for(i = 0;i<5;i++)

printf("|%d|",TestData[i]);

return 0;

}

4、简单选择排序中,需要移动的记录次数比较少,主要的时间消耗在对于数据的比较次数。基本上,在比较的时候,消耗的时间复杂度为:nn。

选择排序改进了冒泡排序,每次遍历列表只做一次交换,为了做到这一点,一个选择排序在遍历时寻找最大的值,并在完成遍历后,将其放到正确的地方。

第二次遍历,找出下一个最大的值。遍历n-1次排序n个项,最终项必须在n-1次遍历之后。

接下来呢,我们直接进行把最小值放到已排序序列末尾的 *** 作。当然这是第一轮循环,还没有产生已排序的序列。0就是已排序序列的开头数字了。

第二轮初始化开始,我们继续选取假设的最小值,这次,我们还是选取第一个数字作为假设的最小值,需要注意的是,0已经是已排序序列,我们要从未排序的序列中选取第一个数字,也就是(5、1、8、6、2、3、4、9、7)无序序列中的数字5。

以上就是关于C语言:用选择排序法对一个数组里的数进行排序,从小到大,要求选出小的进行排序全部的内容,包括:C语言:用选择排序法对一个数组里的数进行排序,从小到大,要求选出小的进行排序、如何用c语言实现输入一些数字,按照从大到小排序输出、C语言算法设计,选择排序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9515425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存