首页 > 其他分享 >25.选择排序

25.选择排序

时间:2023-06-25 20:44:24浏览次数:36  
标签:25 arr beauties int max len 选择 ++ 排序

从前有个王国,国王骄奢无度,贪图女色,后宫佳丽三千,但还是动用大量财力物力在全国范围内招妃纳妾,浸淫于女色之中。

又是一年的选妃开始,今年国王对身高比较敏感,要求这些候选者按照从低到高的顺序排列,供其选择。。。

宫廷首席太监小桂子于是命令所有小公公把宫女的身高都量出来并上报到他处,然后命令身为太监伴读小书童的你帮他按身高大小排好序,数据如下:

常规思维:
第一步先找出所有候选美女中身高最高的,与最后一个数交换

第二步再找出除最后一位美女外其它美女中的最高者,与倒数第二个美女交换位置

第三步 再找出除最后两位美女外其它美女中的最高者,与倒数第三个美女交换位置,因为倒数第三个本身已是最大的,所以实际无需交换。

。。。。。。重复以上步骤,直到最后只剩下一人,此时,所有的美女均已按照身高由矮到高的顺序排列

代码实现:

#include <stdio.h>
#include <stdlib.h>

void swap(int* num1, int* num2)//交换两个指针保存的值
{
	int temp = *num1;
	*num1 = *num2;
	*num2 = temp;
}

void SelectSort1(int arr[], int len)
{
	for (int i = 0; i < len - 1; i++) 
	{
		int max = 0;
		for (int j = 1; j < len - i; j++) //查找未排序的元素
		{ 
			if (arr[j] > arr[max])  //找到目前最大值
			{
				max = j;
			}
		}

		//printf("max: %d beauties %d\n", max,len-i-1);

		if (max != (len - i - 1)) 
		{
			swap(&arr[max], &arr[len - i - 1]);
		}
	}
}

void SelectSort2(int arr[], int len) 
{
	int i, j;

	for (i = 0; i < len - 1; i++)
	{
		int min = i;
		for (j = i + 1; j < len; j++) //查找未排序的元素
		{ 
			if (arr[j] < arr[min])//找到目前最小值
			{ 
				min = j; //记录最小值
			}
		} 
		swap(&arr[min], &arr[i]); //交换
	}
}

int main()
{
	int beauties[] = { 163, 161, 158, 165, 171, 170, 163, 159, 162 };

	int len = sizeof(beauties) / sizeof(beauties[0]);

	/*
	for (int i = 0; i < len - 1; i++)//len个元素,执行len-1次选择
	{
		int max = 0;

		for (int j = 1; j < len - i; j++)//查找未排序元素
		{
			if (beauties[j] > beauties[max])
				max = j;//找到未排序元素中的最大值
		}

		if (max != len - i - 1)//把最大值和倒数第一个待处理元素交换
		{
			swap(&beauties[max], &beauties[len - i - 1]);
		}
	}
	*/

	SelectSort2(beauties, len);

	printf("美女排序以后的结果是:\n");
	for (int i = 0; i < len; i++)
	{
		printf("%d ", beauties[i]);
	}


	system("pause");
	return 0;
}

参考资料来源:

奇牛学院

标签:25,arr,beauties,int,max,len,选择,++,排序
From: https://www.cnblogs.com/codemagiciant/p/17503909.html

相关文章

  • 2023-06-25:redis中什么是缓存穿透?该如何解决?
    2023-06-25:redis中什么是缓存穿透?该如何解决?答案2023-06-25:缓存穿透缓存穿透指的是查询一个根本不存在的数据,在这种情况下,无论是缓存层还是存储层都无法命中。因此,每次请求都需要访问数据库,这将导致不存在的数据每次都需要查询存储层,这样缓存就失去了保护后端存储的作用。缓存穿透......
  • 2023-06-25:redis中什么是缓存穿透?该如何解决?
    2023-06-25:redis中什么是缓存穿透?该如何解决?答案2023-06-25:缓存穿透缓存穿透指的是查询一个根本不存在的数据,在这种情况下,无论是缓存层还是存储层都无法命中。因此,每次请求都需要访问数据库,这将导致不存在的数据每次都需要查询存储层,这样缓存就失去了保护后端存储的作用。缓存......
  • 开发实用小技巧(1):RuntimeError: 'cryptography' package is required for sha256_passw
    问题:RuntimeError:'cryptography'packageisrequiredforsha256_passwordorcaching_sha2_passwordauthmethods这个错误通常是由于在使用MySQL数据库时,未安装或功能不完整的“cryptography”包所引起的,所以下载“cryptography”这个包即可!!!解决思路:pipinstallcryptogr......
  • 个人博客-给推荐文章添加排序字段
    个人博客-给推荐文章添加排序字段前言前篇文章优化了推荐文章的加载,但是呢,还是不太满意,之前是按照文章的发布日期去排序的,既然是推荐文章,还是得用一个字段去专门管理顺序。设计思路:给推荐文章表添加一个排序字段,然后写一个修改方法即可。数据库字段这里的数据类型以sqlite3......
  • 2023年6月25日 汇川H5UPLC突发生异常,无报警,无警告。数据丢失!
    2023年6月25日多线切割机问题描述:在人工绕线过程中,设备突发跳电,控制电源正常,动力电源接触器跳开。发现PLC报警异常。链接PLC后,发现数据全部丢失(归零)。重新上电后,输入数据,设备恢复正常运行。疑点方向:能引起数据清理的错误,首先怀疑寄存器溢出导致运算错误。还有设备本身线的长......
  • 其他——25封装表单验证
    前言:在我们做vue项目,日常开发的时候,肯定会经常遇到正则表达式,例如手机号,邮箱,密码和数字,每次验证都需要去查询,浪费时间不说,也造成代码冗余,我也遇到过,那我就自己封装一个吧,方便大家使用查询。1.封装一个公共的js文件,命名rule.js://手机号验证telphone:(rule,value,callback......
  • 2023.6.25 圆和矩形是否有重叠
    原问题可以转换为,判断圆心到矩形的最短距离是否小于等于半径。根据这张图,可以得到矩形到圆心的距离是\(\sqrt{x^2+y^2}\),其中x和y分别是圆心和矩形的横纵坐标之差。求横纵坐标之差其实也很简单,以横坐标为例,圆心的坐标为x,矩形的坐标是x1和x2。那么就是\(min(|x-x_1|,|x-......
  • php 二维数组排序
    主要通过 array_multisort函数来进行排序<?php//原数组$arr=[["name"=>"小明","age"=>18],["name"=>"小红","age"=>7],["name"=>"小刚","age"=>52],[&......
  • AIX中使用DBCA创建数据库ora-12547错误解决一例
                             AIX中使用DBCA创建数据库ora-12547错误解决一例 Couldnotloadprogramoracledevmdm:Symbolresolutionfailedfor/usr/lib/libc.a[aio_64.o]because:Symbolkaio_rdwr64(number1)isnotexportedfrom......
  • 6.25数据类型
    数字类型整数int浮点数float  如:13.14-13.14复数complex  如:4+3j以j结尾表示复数布尔bool  表达现实生活中的逻辑,即真和假,True表示真,False表示假。True本质上是一个数字记作1,False记作0字符串String 描述文本的一种数字类型,是由任意数量的字符如中文、英文、各......