数据结构<一> 排序算法之选择排序

选择排序算法描述:假设有一数组,内有N个无序数字,进行从小到大选择排序,从第一个数字开始遍历数组,挑选最小的数字与数组第一个数字进行交换,然后从第二个数字开始进行第二次遍历,选次小的数字与第二个数字进行交换,以此类推,第N-1遍遍历后,数组排序完成。


选择排序实现过程



时间复杂度为O(n²),代码实现过程如下:

#include<iostream>

#define SIZE 5

using namespace std;

typedef struct{
    int text_num;
    char text_char;
}TEXT;

void Swap(TEXT *b, int p, int q){
    TEXT temp;
    temp.text_num=b[p].text_num;
    b[p].text_num=b[q].text_num;
    b[q].text_num=temp.text_num;
    temp.text_char=b[p].text_char;
    b[p].text_char=b[q].text_char;
    b[q].text_char=temp.text_char;
}

void selection_sort(TEXT *a){
    int Max;
    int Max_order;
    for(int i=0;i<SIZE-1;i++){
        Max=a[i].text_num;
        Max_order=i;
        for(int j=i;j<SIZE;j++){
            if(a[j].text_num>Max){
                Max_order=j;
            }
        }
        Swap(a,i,Max_order);
    }
}

void show(TEXT *a){
    cout << "排序后的数字及字符为:" << endl;
    for(int i=0;i<SIZE;i++){
        cout << a[i].text_num << " " << a[i].text_char << endl;
    }
}

int main(){

TEXT text[SIZE];

cout << "请输入数字及字符,输入格式为\"数字 字符\",输入后请回车" << endl;

for(int i=0;i<SIZE;i++){
    cin >> text[i].text_num >> text[i].text_char;
}

selection_sort(text);

show(text);

return 0;
}



运行结果:



稳定性:

如上图所示,待排序数列中,有三个数字2,为标明其身份,定义结构体中添加一个字符变量,输入的3个数字2,其身份分别为q、e、t,经过排序之后,身份变更为t、e、q,由此可知,插入排序为不稳定排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值