简单选择排序

本文章的代码使用jetbrains公司旗下的的Clion编写,操作系统位macOS Ventura(13.2.1). 代码没有在dev-c++测试过(dev-c++可能会有相关的空格问题)

//
// Created by 魏志杰 on 2023/7/25.
//

#include "stdio.h"
#define Max 100
#define before  printf("排序前")
#define after   printf("排序后")
#define newline printf("\n")
#define print   printf("%6d", R[i].key)
#define printA  printf("%6d",A[i])
#define Array int A[]={5,7,2,5,9,6,-42,1,67,2,3};

typedef struct {
    int key;
    int data;
}SqType;

//选择排序的基本思路是:每步从待排序的元素中获取关键字最小的元素,按顺序排放在已经排列好的元素的后面

void select(SqType R[] ,int n){
    int i,j,k;
    SqType tmp;
    for(i=0;i<n-1;i++){
        k=i;
        for (j= i+1; j < n; j++)
            if (R[j].key<R[k].key)
                k=j;
        if (k !=i ){
            tmp=R[i];
            R[i]=R[k];
            R[k]=tmp;
        }
    }
}

void select_1(int A[],int n){
for (int i = 0; i < n-1; i++) {
    int minIndex=i;                 //记录最小索引
    for (int j = i+1; j < n; j++) {
        if (A[j]<A[minIndex]){
            minIndex=j;             //更新索引
        }
    }
    //交换当前最小位置与当前末排序部分的第一个元素交换位置
    int temp=A[i];
    A[i]=A[minIndex];
    A[minIndex]=temp;

}
}


int  main(){
    SqType R[Max];
    Array;
    for (int i = 0; i < 10; i++)
        R[i].key = A[i];
    before;
    for (int i = 0; i < 10; i++)
        print;
    newline;
    select(R,10);
    after;
    for (int i = 0; i < 10; i++)
        print;
    newline;
    select_1(A,10);
    after;
    for (int i = 0; i < 10; i++)
        printA;

}

代码结果如下

posted @ 2023-07-25 17:05  xiaozhounandu  阅读(15)  评论(0)    收藏  举报