新手笔记-简单的排序练习

根据分数排序和名字字母排序




 2 #include <string.h>
 3 #include <stdio.h>
 4 struct person{
 5         char *name;
 6         int score;
 7 };
 8
 9 int init(struct person *p, char *name, int score)
10 {
11         p->name = name;
12         p->score = score;
13 }
14
15 int find_max(struct person *p)
16 {
17         int i, j;
18         int max = p->score;
19         for(i=0; i<6; i++)
20         {
21                 if((p+i)->score > max)
22                         max = (p+i)->score;
23         }
24
25         return max;
26 }
27
28 int sort(struct person *p)
29 {
30         int i=0, j=0, max=0, maxi=0, k=0;
31         char *arr;
32         for(i=0; i<6; i++)
33         {
34                 maxi=i;
35                 max = (p+i)->score;
36                 for(j=i+1; j<6; j++)
37                 {
38                         if((p+j)->score > max)
39                         {
40                                 max = (p+j)->score;
41                                 maxi = j;
42                         }
43                 }
44                 arr = (p+i)->name;
45                 (p+i)->name = (p+maxi)->name;
46                 (p+maxi)->name = arr;
47
48                 k = (p+i)->score;
49                 (p+i)->score = (p+maxi)->score;
50                 (p+maxi)->score = k;
51
52                 printf("sss is %d \n", (p+i)->score);
53         }
54
55 }
56
57 int sort1(struct person *p)
58 {
59         int i, j, k, m;
60         char *arr;
61
62         for(i=0; i<6; i++)
63         {
64                 for(j=i+1; j<6; j++)
65                 {
66                         m = strcmp((p+i)->name , (p+j)->name);
67                         if(m > 0)
68                         {
69                                 arr = (p+i)->name;
70                                 (p+i)->name = (p+j)->name;
71                                 (p+j)->name = arr;
72
73                                 k = (p+i)->score;
74                                 (p+i)->score = (p+j)->score;
75                                 (p+j)->score = k;
76                         }
77                 }

结果:

sss is 98
sss is 88
sss is 79
sss is 67
sss is 65
sss is 60
tom , 98
jams , 88
jim , 79
lucy , 67
tubi , 65
suoluo , 60
jams , 88
jim , 79
lucy , 67
suoluo , 60
tom , 98
tubi , 65
avg is 76
max is 98

这里分数用的是选择排序,字母用的是冒泡排序

注意:使用选择排序时 maxi 要赋值为当前 i ,每次要从下一次开始,对算法要多思考多练习。

时间: 2024-11-03 21:05:12

新手笔记-简单的排序练习的相关文章

黑马程序员--IOS学习笔记--数组及排序

IOS学习笔记 概述: 8_2.改变整型变量的符号 8_2.改变整型变量所占存储空间 8_3.char类型数据存储 8_4.数组的基本概念及分类 8_5.数组元素作为函数参数 8_5.一维数组定义及注意事项 8_6.一维数组初始化 8_7.一维数组一个让人疑惑的问题 8_8.一维数组的引用 8_9.应用:数组遍历 8_10.一维数组的存储方式 8_11.一维数组的地址 8_12.一维数组长度计算方法 8_13.一维数组的越界问题 8_14.应用:找最大值 8_15.数组元素作为函数参数 8_16

八大排序算法之三选择排序—简单选择排序(Simple Selection Sort)

基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 简单选择排序的示例: 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i 趟,则从第i 个记录开始的n-i+1 个记录中选出关键码最小的记录与

简单选择排序的C++实现

简单选择排序(simple selection sort)的基本思想: 第一次选择所有数组元素中最小的放到第一个位置,第二次从剩下的n-1个元素中选择最小的放到第二个位置,以此类推,直到剩下一个元素,放到最后的位置上. 基本步骤: (1)首先通过n-1次比较,从n个数组元素中找出最小的,将它与a[0]交换——第1趟选择排序,结果最小的数被安置在a[0]位置上. (2)再通过n-2次比较,从剩下的n-1个数组元素中找出次小的,将它与a[1]交换——第二趟选择排序,结果次小的放在a[1]的位置上.

排序——直接选择排序(简单选择排序)

直接选择排序也称简单选择排序,是一种相对简单的排序算法,它的基本思想是:从一列数中找出最小的,和第一个交换:剩下的重新找出最小的,和这列数的第二个交换,......一直进行n-1次比较之后,该数列已经为有序数列了. 例如:已知一组无序数列:6 3 5 1 4 2 9 第一次:[6 3 5 1 4 2 9] 最小数为:1 第二次:1 [3 5 6 4 2 9] 最小数为:2 第三次:1 2 [5 6 4 3 9] 最小数为:3 第四次:1 2 3 [6 4 5 9] 最小数为:4 第五次:1 2

算法_简单选择排序

每一轮选一个最小的和最靠前的位置交换. 栗子 : 3 7 1 5 第一轮:1 7 3 5 第二轮:1 3 7 5 第三轮:1 3 5 7 for(int i = 0;i<n;i++){//这里应该可以是i<n-1,最后一轮只剩一个无所谓 k = i; for (int j = i + 1; j < n; j++) { if (a[k] > a[j]) { k = j; } } if (k != i) { temp = a[i]; a[i] = a[k]; a[k] = temp;

14. 蛤蟆的数据结构进阶十四排序实现之简单选择排序

14. 蛤蟆的数据结构进阶十四排序实现之简单选择排序 本篇名言:"即是我们是一支蜡烛也应该 " 蜡烛成灰泪始干 " 即使我们只是一根火柴也要在关键时刻有一次闪耀即使我们死后尸骨都腐烂了解也要变成磷火在荒野中燃烧. -- 艾青" 继续来看什么是简单选择排序. 欢迎转载,转载请标明出处: 1.  简单选择排序 设所排序序列的记录个数为n.i取1,2,-,n-1,从所有n-i+1个记录(Ri,Ri+1,-,Rn)中找出排序码最小的记录,与第i个记录交换.执行n-1趟后就完

排序算法之简单选择排序

基本思想 在一组元素中选择具有最小排序码的元素,若它不是这组元素中的第一个元素,则将它与这组元素中的第一个元素对调:在未排序的剩下的元素中反复运行以上步骤,直到剩余元素仅仅有一个为止. 代码 private void selectSort(int[] a, int left, int right) { for (int i = left; i < right; i++) { int k = i; int temp; for (int j = i + 1; j <= right; j++) {

经典排序算法--简单选择排序

算法简介 简单选择排序是一种选择排序. 选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止. 白话理解 依然已排队为例,在排队时,有的老师可能会选择这样排序,先在一列中选出最矮的,放在第一位,然后选出第二矮的,放在第二位.队伍完成排序.而这就是选择排序的思想. 简单排序处理流程 (1)从待排序序列中,找到关键字最小的元素: (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换: (3)从余下的 N - 1 个元素中,找出关键字最小

常见排序算法导读(3)[简单选择排序]

这一节将介绍简单选择排序(Simple Selection Sort). 在介绍简单排序算法之前,先给出排序的确切定义,并简单介绍一下排序算法的稳定性. 排序的确切定义 假设含有n个对象的序列为{R[0], R[1], ..., R[n-1]}, 其对应的关键字(key)序列为{K[0], K[1], ..., K[n-1]}. 所谓排序, 就是确定0, 1, ..., n-1的一种排列p[0], p[1], ..., p[n-1], 使各个关键字满足如下的非递减(升序)或非递增(降序)关系: