C语言算法设计,选择排序

Python018

C语言算法设计,选择排序,第1张

排序如下:

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 = 0i < 9i ++ ) /*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 <stdio.h>

 

int change(int amount, int index, int const coins[]) {

    if(amount == 0) return 1

    if(index <= 0) return 0

    for(int i = amount / coins[index - 1] i >= 0 --i) {

        if(change(amount - i * coins[index - 1], index - 1, coins)) {

            if(i)

                printf(" %d*%d", i, coins[index - 1])

            return 1

        }

    }

    return 0

}

 

int main()

{

    int coins[] = { 20, 50}

    int const size = sizeof(coins)/ sizeof(int)

    int amount

    for(int i = 0  i < size ++i) {

        for(int j = i + 1  j < size ++j) {

            if(coins[i] > coins[j]) {

                int temporary = coins[i]

                coins[i] = coins[j]

                coins[j] = temporary

            }

        }

    }

    if(coins[0] <= 0) {

        printf("数据有误,零钱必须大于0\n")

        return -1

    }

    printf("请输入要兑换的货币金额: ")

    scanf("%d", &amount)

    if(change(amount, size, coins)) 

        printf("\n兑换成功\n")

    else printf("\n兑换失败\n")

    return 0

}

#include

int

main(void)

{

int

i,a[3]

printf("enter

3

numbers:")//输入3个书

for(i=0i

{

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

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

a[i]=a[0]+a[i]-(a[0]=a[i])//把最大的放在a〔0〕,就只要比较一次就行了。

}

if(a[1]

printf("the

number

from

max

to

low:")

for(i=0i

printf("%d\t",a[i])

printf("\n")

return

0

}