题目
本栏目是数据结构C语言版的十大排序算法,因为我只考常用的一些排序算法,所以会只更新一部分常用算法,每个排序分为算法思想,算法代码和执行结果三个部分展现。
更新第二篇:C语言实现选择排序
以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj。QQ:2394799692
一、算法思想
1.算法执行过程动图演示:
2.定义:
选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
3.算法思想:
1.n个数据一共需要进行n-1趟排序后,数组内元素为有序状态
2.将当前序列的最小值找出
3.将最小值与i的位置进行交换,i++后再次扫描的序列就是i++到n+1的序列,0-i这个序列中存放的是已通过选择排序好的有序数列。
4.循环,i++。
4.我的总结:
选择排序就是先扫描待排序列,选择出最小值,把它丢到(与其交换)第一个元素那里,然后有序序列+1,待排序序列-1,如此往复的过程,直到n-1次后完成最终排序。
稳定性为:不稳定
时间复杂度为:O(n ^2)
空间复杂度为:O(n)
5.学习笔记:
二、代码部分
1.引入库
代码如下(示例):
#include<stdio.h>
2.主函数部分
代码如下(示例):
void selectsort(int a[], int n)
{
for (int i = 0; i < n - 1; i++)//一共进行n-1趟
{
int min = i;//记录最小值
for (int j = i + 1; j < n; j++)//在待排序列中选择最小元素
if (a[j] < a[min])
min = j;
if (min!=i)//更新最小元素位置
{
int tmp = a[i]; a[i] = a[min]; a[min] = tmp;
}
}
}
void main()
{
int a[] = { 1,2,3,4,9,8,7,6,5 };
int n = sizeof(a) / sizeof(int);
selectsort(a, n);
for (int i = 0;i < n; i++)
printf("%d ", a[i]);
}
## 3.一种更加简单的选择排序 这个排序我不知道是否属于选择排序,但是是基于选择排序的代码写的。只需要两行代码即可完成,总之非常简单(比冒泡还好记),适合考试时把所有排序算法忘记的同学使用,代码是完全正确的,可以完成排序认为。
for (int i = 0; i < n - 1; i++)
for (int j = i + 1; j < n; j++)
if (a[i] < a[j])
{
int tmp = a[i]; a[i] = a[j]; a[j] = tmp;
}
三、执行结果
输入:
a[] = { 1,2,3,4,9,8,7,6,5 };
输出:
1 2 3 4 5 6 7 8 9