数据结构与算法学习之排序–插入排序
原理:简单插入排序算法原理:从整个待排序列中选出一个元素插入到已经有序的子序列中去,得到一个有序的、元素加一的子序列,直到整个序列的待插入元素为0,则整个序列全部有序。
C语言实现:
#include "stdio.h"
#include "string.h"
/*
* author:朱红喜
* date:2019.5.1
* title:数据结构插入排序算法实现
*
*/
//自定义的boolean 类型
#define boolean int
#define true 1
#define false 0
#define MAX_SIZE 20//结构体成员变量数组最大长度
int N;//输入的学生人数全局变量
typedef struct {
int score;
char num[MAX_SIZE];
char name[MAX_SIZE];
}student;
/*输入学生数据*/
student * input() {
printf("请输入学生人数:");
scanf("%d", &N);//获得数组长度
student * students = (student *)malloc(N * sizeof(student));
for (int i = 0; i < N; i++)
{
printf("请输入第%d个学生信息:\n",i+1);
scanf("%s %s %d", students[i].num, students[i].name, &students[i].score);
printf("num=%s name=%s score=%d\n", students[i].num, students[i].name, students[i].score);//检验输入
}
return students;
}
/*插入排序*/
student * InserSort(student * students, boolean inverse){
int i, j;
if (inverse == true) {
printf("从小到大排序后的学生信息:\n");
for (int i = 1; i < N; i++){
for (j = 0; j < i; j++) {
if (students[j].score>students[i].score) {
student temp = students[i];
students[i].score = students[j].score;
students[j].score = temp.score;
}
}
}
return students;
}else {
printf("从大到小排序后的学生信息:\n");
for (int i = 1; i < N; i++) {
for (j = 0; j < i; j++) {
if (students[j].score<students[i].score) {
student temp = students[i];
students[i].score = students[j].score;
students[j].score = temp.score;
}
}
}
return students;
}
}
/*显示数据排序结果*/
void dislpay(student * students) {
for (int i = 0; i < N; i++)
{
printf("num=%s name=%s score=%d\n", students[i].num, students[i].name, students[i].score);
}
}
void main() {
student * students = input();
students = InserSort(students,false);
dislpay(students);
}