四、完整程序
1、头文件
#ifndef _Search_h #define _Search_h #include<stdio.h> #include<iostream> #include<string.h> #include<stdlib.h> using namespace std; typedef int Status; #define MAXSIZE 100 #define OK 1 #define ERROR 0 #define NUM 8//表长 #define OVERFLOW -1 typedef struct { int stu_id; char name[10]; char class_id[10]; int cpp_score; int stru_score; }Stu; typedef struct { Stu* elem; int length; }SqList; //菜单 void menu(); //信息初始化 Status InitList(SqList &L); //输出数据 void OutList(SqList L, int i); //输出全部数据 void OutAllList(SqList L); //顺序查找 void SqSearch(SqList L); //二分查找 void binaryFld(SqList L); //直接插入排序 void Insert_sorting(SqList &L); //冒泡排序 void Bubbling_sorting(SqList &L); //直接选择排序 void Choose_sorting(SqList& L); #endif
2、功能函数文件
#include"Search.h" //菜单 void menu() { printf("*******************学生成绩管理系统*******************\n"); printf("* 1.信息初始化 2.顺序查找 *\n"); printf("* 3.二分查找 4.直接插入排序 *\n"); printf("* 5.冒泡排序 6.直接选择排序 *\n"); printf("* 0.退出 *\n"); printf("******************************************************\n"); } //初始化 Status InitList(SqList& L) { L.elem = new Stu[MAXSIZE]; if (!L.elem) exit(OVERFLOW); L.length = NUM; int i = 0; for (i = 0; i < L.length; i++) { cout << "请依次输入学号,姓名,班级,C++成绩,数据结构成绩>:"; scanf("%d", &L.elem[i].stu_id); scanf("%s", L.elem[i].name); scanf("%s", L.elem[i].class_id); scanf("%d", &L.elem[i].cpp_score); scanf("%d", &L.elem[i].stru_score); } // L.elem[0] = { 1,"王立","03511",85,76 }; // L.elem[1] = { 2,"张秋","03511",78,88 }; // L.elem[2] = { 3,"刘丽","03511",90,79 }; // L.elem[3] = { 4,"王通","03511",75,86 }; // L.elem[4] = { 5,"赵阳","03511",60,71 }; // L.elem[5] = { 6,"李艳","03511",58,68 }; // L.elem[6] = { 7,"钱娜","03511",95,89 }; // L.elem[7] = { 8,"孙胜","03511",45,60 }; return OK; } //输出某一数据 void OutList(SqList L, int i) { cout << L.elem[i].stu_id << "\t" << L.elem[i].name << "\t" << L.elem[i].class_id << "\t" << L.elem[i].cpp_score << "\t" << L.elem[i].stru_score << endl; } //输出全部数据 void OutAllList(SqList L) { int i = 0; for (i = 0; i < L.length; i++) { cout << L.elem[i].stu_id << "\t" << L.elem[i].name << "\t" << L.elem[i].class_id << "\t" << L.elem[i].cpp_score << "\t" << L.elem[i].stru_score << endl; } } //顺序查找 void SqSearch(SqList L) { int i = 0; int flag = 0; cout << "请输入你要查找的学生姓名>:"; char arr[10] = "\0"; scanf("%s", arr); for (i = 0; i < L.length; i++) { if (strcmp(L.elem[i].name, arr) == 0) { flag = 1; cout << "该学生信息如下>:" << endl; OutList(L, i); break; } } if (flag == 0) cout << "未找到该学生!" << endl; } //二分查找 void binaryFld(SqList L) { cout << "请输入你要查找的学生学号>:"; int id = 0; cin >> id; int low = 0; int high = L.length - 1; int flag = 0; while (low <= high) { int mid = (low + high) / 2; if (L.elem[mid].stu_id < id) { low = mid + 1; } else if (L.elem[mid].stu_id > id) { high = mid - 1; } else { flag = 1; cout << "你要查找的学生信息如下>:" << endl; OutList(L, mid); break; } } if (flag == 0) cout << "未找到该学生!" << endl; } //直接插入排序 void Insert_sorting(SqList &L) { int i = 0; for (i = 1; i < L.length; i++) { Stu t={0}; if (strcmp(L.elem[i].name,L.elem[i - 1].name)<0) { t= L.elem[i]; L.elem[i]= L.elem[i - 1]; //寻找插入位置 int j = 0; for (j = i - 1; strcmp(L.elem[j].name,t.name)>0 ; j--) { L.elem[j + 1]= L.elem[j]; } L.elem[j + 1]= t; } } } //冒泡排序 void Bubbling_sorting(SqList& L) { int i = 0; int m = L.length - 1; int flag = 1; Stu tmp = { 0 }; while (m > 0 && flag == 1) { flag = 0; for (i = 0; i < m; i++) { if (L.elem[i].cpp_score > L.elem[i + 1].cpp_score) { flag = 1; tmp = L.elem[i + 1]; L.elem[i + 1] = L.elem[i]; L.elem[i] = tmp; } } --m; } } //直接选择排序 void Choose_sorting(SqList& L) { int i = 0; int k = 0; int j = 0; Stu tmp = {0}; for (i = 0; i < L.length; i++) { k = i; for (j = i + 1; j < L.length; j++) { if (L.elem[k].stru_score > L.elem[j].stru_score) { k = j; } } if (k != i) { tmp = L.elem[i]; L.elem[i] = L.elem[k]; L.elem[k] = tmp; } } }
3、主函数文件
#include"Search.h" int main() { SqList L; int input = 0; do { menu(); printf("请选择>:"); cin >> input; switch (input) { case 1: //信息初始化 InitList(L); break; case 2: //顺序查找 SqSearch(L); break; case 3: //二分查找 binaryFld(L); break; case 4: //直接插入排序 cout << "排序前表为>:" << endl; OutAllList(L); Insert_sorting(L); cout << "排序后表为>:" << endl; OutAllList(L); break; case 5: //冒泡排序 cout << "排序前表为>:" << endl; OutAllList(L); Bubbling_sorting(L); cout << "排序后表为>:" << endl; OutAllList(L); break; case 6: //直接选择排序 cout << "排序前表为>:" << endl; OutAllList(L); Choose_sorting(L); cout << "排序后表为>:" << endl; OutAllList(L); break; case 0: cout << "退出系统" << endl; break; } } while (input); return 0; }
四、总结
简单的查找与排序相信大家都很容易理解,博主会持续更新查找排序算法,欢迎大家关注博主动态🔥🔥🔥