排序算法——选择排序
2009-11-08 09:41
190 查看
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
最坏时间复杂度 O(n^2)
选择排序是不稳定的排序算法。例如5 8 5 2 9。第一次选择5 与 2交换 ,之后两个5的相对位置就改变了。
Code:
#include <stdio.h>
void select_sort(int a[], int num)
{
int i, j, k, min, temp;
for (i = 0; i < num - 1; i++) {
min = i;
for (j = i + 1; j < num; j++) {
if (a[min] > a[j]) {
min = j;
}
}
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
void print(int a[], int num)
{
int k;
for (k = 0; k < num; k++)
printf("%d ", a[k]);
printf("/n");
}
int main()
{
int i, num;
int a[10] = {1,7,5,8,4,2,6,9,3,10};
num = sizeof(a) / sizeof(int);
select_sort(a, num);
print(a, num);
return 0;
}
8-18行代码,每次遍历记录最小值的下标,最终选取的是当前剩余序列的最小值。
最坏时间复杂度 O(n^2)
选择排序是不稳定的排序算法。例如5 8 5 2 9。第一次选择5 与 2交换 ,之后两个5的相对位置就改变了。
Code:
#include <stdio.h>
void select_sort(int a[], int num)
{
int i, j, k, min, temp;
for (i = 0; i < num - 1; i++) {
min = i;
for (j = i + 1; j < num; j++) {
if (a[min] > a[j]) {
min = j;
}
}
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
void print(int a[], int num)
{
int k;
for (k = 0; k < num; k++)
printf("%d ", a[k]);
printf("/n");
}
int main()
{
int i, num;
int a[10] = {1,7,5,8,4,2,6,9,3,10};
num = sizeof(a) / sizeof(int);
select_sort(a, num);
print(a, num);
return 0;
}
8-18行代码,每次遍历记录最小值的下标,最终选取的是当前剩余序列的最小值。
相关文章推荐
- 【排序算法】之选择排序
- 排序算法——选择排序(Selection Sort)
- c/c++常用算法(10) -- 基本排序算法(选择排序)
- (巩固基础篇)排序算法:①插入排序②希尔排序③冒泡排序④选择排序⑤快速排序
- 排序算法3——选择排序
- 排序算法(二)——选择排序
- 选择排序,冒泡排序,排序算法实现与原理
- 排序算法——选择排序
- 排序算法《二》选择排序
- 排序算法Java实现——选择排序(直接选择排序)
- 深入浅出理解排序算法之-选择排序
- 排序算法——选择排序
- 排序算法总结(2)——选择排序
- 排序算法——选择排序
- 排序算法之(2)——选择排序
- 用Python实现基本排序算法02——选择排序
- Java排序算法总结之(三)——选择排序(简单选择排序、堆排序)
- 排序算法·选择排序
- 深入浅出理解排序算法之-选择排序
- 排序算法Java实现——选择排序(堆排序)