欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 【C语言零基础入门篇 - 17】:排序算法

【C语言零基础入门篇 - 17】:排序算法

2025/11/30 2:55:12 来源:https://blog.csdn.net/Oh_Python/article/details/142447878  浏览:    关键词:【C语言零基础入门篇 - 17】:排序算法

文章目录

  • 排序算法
    • 排序的基本概念
    • 冒泡排序
    • 选择排序
    • 插入排序

排序算法


排序的基本概念

1、什么是排序?
排序是指把一组数据以某种关系(递增或递减)按顺序排列起来的一种算法。

例如:数列 8、3、5、6、2、9、1、0、4、7

递增排序(升序)后 0、1、2、3、4、5、6、7、8、9

递减排序(降序)后 9、8、7、6、5、4、3、2、1、0

2、排序的稳定性
如果在一组需要排序的数据序列中,数据ki和kj的值相同,即ki= =kj,且在排序前ki在序列中的位置领先于kj,那么当排序后,如果ki和kj的相对前后次序保持不变,即ki仍然领先于kj,则称此类排序算法是稳定的。如果ki和kj的相对前后次序变了,即kj领先于ki了,则称此类排序算法是不稳定的

3、排序的过程
排序的过程中需要进行如下两种基本操作:
(1)比较两个数据的大小;
(2)移动两个数据的位置。

冒泡排序

冒泡排序(从小到大):
原始数据:8、6、5、4、9、7、1、2、3
冒泡一趟:6、5、4、8、7、1、2、3、9
特点:最大的数据会排在最后。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

void BubbleSort(int arr[], int n)//n表示元素个数 从小到大排序
{//冒泡趟数 n-1趟for (int i = 0; i < n - 1; i++){for (int j = 0; j <= n - 1 - i; j++) //把最大的元素排序在最后{if (arr[j] > arr[j + 1]){int temp = arr[j + 1];//temp临时保存数据容器arr[j + 1] = arr[j];arr[j] = temp;}}}
}

选择排序

一个序列进行选择排序,首先通过一轮循环比较,从n个数据中找出最大或者最小的那个数据的位置,然后按照递增或者递减的顺序,将此数据与第一个或最后一个数据进行交换。然后再找第二大或者第二小的数据进行交换,以此类推,直到序列全部有序为止。

选择排序与冒泡排序的区别在于,冒泡排序每比较一次后,满足条件的数据就交换,而选择排序是每次比较后,记录满足条件数据的位置,一轮循环过后再作交换。
在这里插入图片描述

//选择排序
void SelectSort(int arr[], int n)
{//n-1趟int min = 0;for (int i = 0; i < n-1; i++)//i表示当前最小元素的要在的下标值{min = i; //保存下标值for (int j = i + 1; j <= n; j++)//找到当前元素里的最小值{if (arr[min] > arr[j]){min = j;}}int temp = arr[min];arr[min] = arr[i]; arr[i] = temp;}
}

插入排序

插入排序的规则是:第一轮开始时默认序列中第一个数据是有序的,之后各个数据以此为基准,判断是插入在此数据的前面还是后面,之后的数据依次向后移动,腾出位置,让数据插入,以此类推,直到整个序列有序为止。每比较一次,如果满足条件(升序:前面一个数比后面需要插入的数大),就直接交换。

特点:对基本有序的序列插入排序速度相对而言比较快,插入排序的优势越明显,数据量越多,劣势也越明显。
在这里插入图片描述
在这里插入图片描述

//插入排序
void InsertSort(int arr[], int n)
{int j = 0, i = 0;for (j = 1; j <= n; j++){i = j - 1;int temp = arr[j];//如果有序部分的数据,比temp大,往后移一位while (i >= 0 && arr[i] > temp) //有序部分数据遍历从右到左{arr[i + 1] = arr[i];i--;}arr[i + 1] = temp;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词