排序算法(一)-选择排序(Selection Sort)

26 篇文章 0 订阅
4 篇文章 0 订阅

工作原理:每次寻找出数组最大/小值放到序列起始位置(始/末)

C语言实现:

1.简单版

#include <stdio.h>

//定义常量数组长度
#define MAX_SIZE 5
#define SWAP(x, y, t)  ((t) = (x), (x) = (y), (y) = (t))

//算法时间复杂度O=n^2
int main(int argc, const char * argv[])
{
    int n,temp;
    int arr[MAX_SIZE]={5,4,1,3,2};
    //如果次数大于数组长度,则结束递归
    for (n=0; n<MAX_SIZE-1; n++) {
        int min=n;
        for (int index = n+1; index<MAX_SIZE; ++index) {
            if (arr[min]>arr[index]) {
                min=index;
            }
        }
        //交换数值
        SWAP(arr[min], arr[n],temp);
    }
    for (int i=0; i<MAX_SIZE; ++i) {
        printf("a[%d]:%d ",i,arr[i]);
    }
    return 0;
}




2.模块化

#include <stdio.h>

//定义常量数组长度
#define MAX_SIZE 5
//&符号在函数形式参数上代表实际参数的值会随函数操作改变而改变
void sort(int[],int &);

void print_list(int[]);

void swap(int &,int &);

//算法时间复杂度O=n^2
int main(int argc, const char * argv[])
{
    //次数
    int n = 0;
    //定义数组
    int arr[MAX_SIZE]={5,4,1,3,2};
    sort(arr,n);
    print_list(arr);
    return 0;
}

/**
 * Sort 比较排序,从小到大
 * @param array list[] 需要排序的数组
 * @param int n 执行排序的次数
 */
void sort(int list[],int &n)
{
    int min=n;
    //如果次数大于数组长度,则结束递归
    if (n>=MAX_SIZE-1) {
        return;
    }
    int index;
    for (index = n+1; index<MAX_SIZE; ++index) {
        if (list[min]>list[index]) {
            min=index;
        }
    }
    //交换数值
    swap(list[min], list[n]);
    //递归操作
    sort(list, ++n);
}

/**
 * Print_list 遍历数组
 * @param array list[] 需要遍历的数组
 */
void print_list(int list[])
{
    for (int i=0;i<MAX_SIZE;++i) {
        printf("a[%d]:%d ",i,list[i]);
    }
}

void swap(int &a,int &b)
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex-Leung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值