c语言选择排序的程序代码

c语言选择排序的程序代码,第1张

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

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

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

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

代码文本:

#include "stdioh"

int main(int argc,char argv[]){

int a[10]={7,9,1,5,3,4,2,8,0,6},b[10]={2,8,0,6,5,3,4,7,9,1},i,j,k;

for(i=0;i<10;i++){//选择法对a由小到大排序

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

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

k=j;

if(k!=i)

j=a[k],a[k]=a[i],a[i]=j;

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

}

putchar('\n');

for(i=0;i<10;i++)//冒泡法对b由大到小排序

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

if(b[j]<b[j+1])

k=b[j],b[j]=b[j+1],b[j+1]=k;

for(i=0;i<10;printf("%2d",b[i++]));

putchar('\n');

return 0;

}

可以比较它们的异同……

用选择排序法编写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

冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较(`arr[n],arr[n+1]`),如果前面的数大于后面的数(`arr[n] > arr[n+1]`),那么交换两个元素的位置,把大的数往后移动。这样依次经过一轮比较以后,最大的数将会被交换到最后的位置(arr[n-1])。

C语言实现Bubblesort:

void bubblesort(int a[], int m)

    {

        int i,j;

        int tmp;

        int flag = 0;  //设定标志,如果第一次循环比较时没有发生交换,则说明数组是升序排序,不用排序,提前结束循环。

        for(i = 0; i < m; i++)  //外层循环控制循环次数

        {

            for(j = 0; j < m-1-i; j++)    //内层循环控制每次循环里比较的次数。

            {

                if(a[j] > a[j+1])

                {

                    tmp = a[j];

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

                    a[j+1] = tmp;

                    flag = 1;

                }

            }

    

            if(0 == flag)

            {

                printf("No Sort\n");

                break;

            }

            }

    }

选择排序法的过程是,通过比较,选择出每一轮中最值元素,然后把他和这一轮中最最前面的元素交换,所以这个算法关键是要记录每次比较的结果,即每次比较后最值位置(下标)。

C语言实现(Selectionsort)

void selectionsort(int a[],int m)

    {

        int i,j;

        int k;

        int tmp;

        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;

            }

        }

    }

//C语言示例代码如下

#include <stdioh>

#define N 10

//冒泡排序(升序)

void bubble_sort(int a[],int n)

{

int i,j;  //j表示趟数,i表示第j趟两两比较的次数

int tmp; //临时变量

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

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

{

if(a[j] > a[j+1])

{

tmp=a[j];

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

a[j+1]=tmp;

}

}

}

//选择排序算法,按从小到大顺序

void select_sort(int array,int n)

{

    int i,j,k;

    int tmp;

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

    {

        k=i;  //开始一趟选择排序,假定第i个元素是后面n-i+1个未排序的元素中最小的元素

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

        {

if(array[k] > array[j]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标k

    k=j;

        }

//如果最小元素的下标不是后面n-i+1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置

        if(k != i)

        {

            tmp=array[k];

            array[k]=array[i];

            array[i]=tmp;

        }

    }

}

int main()

{

int arr[N];

int i;

printf("输入数组元素: ");

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

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

bubble_sort(arr,N);  //调用冒泡排序函数

printf("输出排序后的数组元素: ");

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

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

printf("\n输入数组元素: ");

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

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

select_sort(arr,N);  //调用选择排序函数

printf("输出排序后的数组元素: ");

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

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

printf("\n");

return 0;

}

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。

以上就是关于c语言选择排序的程序代码全部的内容,包括:c语言选择排序的程序代码、C语言:用选择法对10个整数排序、如何用c语言编写一个程序,实现按从大到小的顺序排序输出10个数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9831348.html

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

发表评论

登录后才能评论

评论列表(0条)

保存