选择排序:简单选择排序(不稳定的排序)
简单选择排序是一种基础的排序算法,它的基本思路是在未排序的序列中选择最小(或最大)的元素,将其与序列的第一个元素进行交换,然后在剩余的未排序序列中继续使用同样的方式进行选择和交换,直到整个序列排序完成。
以下是简单选择排序的实现过程:
-
从序列中选择最小的元素,将其与序列的第一个元素进行交换;
-
在剩下的未排序序列中继续进行选择,找到最小的元素,将其与序列的第二个元素进行交换;
-
依此类推,直到整个序列排序完成
时间复杂度:O(n^2) 。
空间复杂度:O(1) 。
下面我们来看一下代码如何实现
void selectsort(int a[],int sz)
{
int i = 0;
int j = 0;
int min = 0;
int temp = 0;
for (i = 1; i < sz - 1; i++)//进行sz-1趟
{
min = i;//记录最小元素下标
for (j = i + 1; j < sz; j++)//在i到sz-1中选择最小元素
{
if (a[j] < a[min])//更新最小元素的位置
min = j;
}
if (min != i)
{
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
}
完整测试代码
#include<stdio.h>
void selectsort(int a[],int sz)
{
int i = 0;
int j = 0;
int min = 0;
int temp = 0;
for (i = 1; i < sz - 1; i++)//进行sz-1趟
{
min = i;//记录最小元素下标
for (j = i + 1; j < sz; j++)//在i到sz-1中选择最小元素
{
if (a[j] < a[min])//更新最小元素的位置
min = j;
}
if (min != i)
{
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
}
int main()
{
int a[] = { 0,49,38,65,97,76,13,27 };
int sz = sizeof(a) / sizeof(a[0]);
int j = 0;
printf("原始待排序的数组为:");
for(j = 1; j < sz; j++)
printf("%d ", a[j]);
selectsort(a,sz);
printf("\n简单排序后的数组为:");
for (j = 1; j < sz; j++)
printf("%d ", a[j]);
return 0;
}