目录
选择排序
选择排序
堆排序
选择排序
选择排序
选择排序的基本思路是,定义两个区间指针begin和end,遍历数组中的每一个数据找出最大的数据的下标和最小的数据的下标,之后与begin
和end
指针分别交换小数据与begin
的位置以及大数据和end
的数值,具体思路如下
//以下面的数据为例
int data[] = { 23,34,90,16,54,44,78,67 };
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void swap(int* p1, int* p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
void SelectSort(int *data, int sz)
{
int begin = 0;
int end = sz - 1;
while (begin < end)
{
int max_i = begin;//最大值下标
int min_i = begin;//最小值下标
//遍历数组找到最大值的下标和最小值的下标
for (int i = begin; i <= end; i++)
{
if (data[i] > data[max_i])
{
max_i = i;
}
if (data[i] < data[min_i])
{
min_i = i;
}
}
//走完循环交换最大值和最小值
swap(&data[begin], &data[min_i]);
//如果begin和max_i重合,则需要更新max_i
if (begin == max_i)
{
max_i = min_i;
}
swap(&data[end], &data[max_i]);
//更新比较区间
begin++;
end--;
}
}
int main()
{
int data[] = { 23,34,90,16,54,44,78,67 };
int sz = sizeof(data) / sizeof(int);
SelectSort(data, sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", data[i]);
}
return 0;
}
输出结果:
16 23 34 44 54 67 78 90
堆排序
堆排序算法实现与分析见下方的博客文章
堆排序算法及分析-CSDN博客https://blog.csdn.net/m0_73281594/article/details/136407957?spm=1001.2014.3001.5501