#include <stdio.h>
#include <stdlib.h>
/*-------------------- 排序规则 --------------------
它的工作原理是每一次从待排序的数据元素中选出
最小(或最大)的一个元素,存放在序列的起始位
置,直到全部待排序的数据元素排完。
稳定性:选择排序是不稳定的排序方法 如:[5,5,3]
-------------------------------------------------*/
//选择排序(升序排列)
void selectionSort(int *array, int len)
{
int min = 0; // 指向最小的元素的位置
// 外层循环
for (int i = 0; i < len - 1; ++i)
{
min = i;
// 内存循环
for (int j = i + 1; j < len; ++j)
{
// 判断
if (array[min] > array[j])
{
// 保存最小的元素的位置
min = j;
}
}
// 判断是否需要交换
if (min != i)
{
// 找到了新的最小值
// 交换
int tmp = array[min];
array[min] = array[i];
array[i] = tmp;
}
}
}
/******************* 排序规则 *******************
每次处理就是将无序数列的第一个元素与有序数列
的元素从后往前逐个进行比较,找出插入位置,将
该元素插入到有序数列的合适位置中。
稳定性:插入排序是稳定的
***********************************************/
//插入排序算法(升序排列)
void insertionSort(int *array, int len)
{
int tmp = 0; // 存储基准数
int index = 0; // 坑的位置
// 遍历无序序列
for (int i = 1; i < len; ++i)
{
index = i;
tmp = array[i];
// 遍历有序序列(从后往前)
for (int j = i - 1; j >= 0; --j)
{
// 基准数根有序序列中的元素比较
if (tmp < array[j])
{
// 有序序列元素后移
array[j + 1] = array[j];
// 坑的位置
index = j;
}
else
{
break;
}
}
// 填坑
array[index] = tmp;
}
}
选择法和插入法排序框架
最新推荐文章于 2023-01-07 15:17:57 发布