前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法学习<2>---选择排序

算法学习<2>---选择排序

作者头像
哆哆jarvis
发布2022-08-23 14:07:13
1280
发布2022-08-23 14:07:13
举报
文章被收录于专栏:嵌入式进阶之路

引言

代码语言:javascript
复制
数据结构和算法对于程序员来说相当重要,我最近打算学习这一门课程,并以博客的形式记录自己的学习过程和心得,目前暂时从两本书入手,一本是《大话数据结构》,一本书《算法图解》,我先从《算法图解》,这本手开始学习吧~。如果你最近也在学习,可以关注一起学习,一起交流哦~

选择排序

学习选择排序算法之前先回顾一下数组和链表的特点: 数组擅长随机读取,而链表擅长插入和删除。 下面是常见数组和链表操作的运行时间。

数组

链表

读取

O(1)

O(n)

插入

O(n)

O(1)

删除

O(n)

O(1)

C语言实现选择排序

代码语言:javascript
复制
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int arr[10] = {10,9,8,6,7,4,3,1,2,5};
static int smallest;
static int smallest_index = 0;//用于记录最小元素所在位置
//查找数组中最小的元素
int search_min(int *p,int len,int index)
{
	int i;
	smallest = p[index];
	for(i = index; i < len; i++){
		if(p[i] < smallest){
			smallest = p[i];
			smallest_index = i;
		} else if(p[i]==smallest){
			smallest_index = index;	
		}
	}	
	return smallest;
}

//排序函数,将元素从小到大重新排序
int selectionSort(int *p,int len)
{
	int i = 0;
	int smallest;
	static int temp;//临时变量
	for(i = 0; i < len;i++){
		smallest = search_min(p,len,i);//从数组的第i个元素开始向后查找数组找到最小元素
		temp = arr[i]; 
		arr[i] = smallest;	
		arr[smallest_index] = temp;	
	}
}



int main()
{
	int i;
	int res;
	int len;
	smallest = arr[0];
	len = sizeof(arr)/sizeof(arr[0]);
	printf("len = %d\n",len);
	selectionSort(arr,len);//排序
	//打印新的数组元素
	printf("The new arr:\n");
	for(i=0; i<len; i++){
		printf("%d,",arr[i]);
	}
	printf("\n");
	
}

运行结果

原数组元素:arr[10] = {10,9,8,6,7,4,3,1,2,5}

该排序算法的核心用一张图来表示

小结

代码语言:javascript
复制
 计算机内存犹如一大堆抽屉。
 需要存储多个元素时,可使用数组或链表。
 数组的元素都在一起。
 链表的元素是分开的,其中每个元素都存储了下一个元素的地址。
 数组的读取速度很快。
 链表的插入和删除速度很快。
 在同一个数组中,所有元素的类型都必须相同(都为int、double等)。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哆哆jarvis 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
    • 选择排序
      • C语言实现选择排序
    • 小结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档