算法导论:选择排序的原理与实现
2010-08-01 00:00
1376 查看
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下:
首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
下面附上动画演示:
选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。不过条条大路通罗马,两者的目的是一样的。
下面是C语言实现:
从选择排序的思想或者是上面的代码中,我们都不难看出,寻找最小的元素需要一个循环的过程,而排序又是需要一个循环的过程。因此显而易见,这个算法导论:选择排序的原理与实现
首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
下面附上动画演示:
选择排序的思想非常直接,不是要排序么?那好,我就从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。不过条条大路通罗马,两者的目的是一样的。
下面是C语言实现:
#include <stdio.h> #include <stdlib.h> void main() { int i; int arr[10]; int count; printf("排序前数组为:"); srand((int)time(0)); for(i=0; i < 10; i++) { arr[i] = rand()%100; printf("%d ",arr[i]); } count = sizeof(arr)/sizeof(arr[0]); selectionSort(arr, count); printf("\n排序后数组为:"); for(i=0; i < 10; i++) { printf("%d ", arr[i]); } } void selectionSort(int data[], int count) { int i, j, min, temp; for(i = 0; i < count; i ++) { /*find the minimum*/ min = i; for(j = i + 1; j < count; j ++) if(data[j] < data[min]) min = j; temp = data[i]; data[i] = data[min]; data[min] = temp; } }
从选择排序的思想或者是上面的代码中,我们都不难看出,寻找最小的元素需要一个循环的过程,而排序又是需要一个循环的过程。因此显而易见,这个算法导论:选择排序的原理与实现
相关文章推荐
- Python实现的选择排序算法原理与用法实例分析
- 用选择的方式对数组进行排序,并写出对应的优化后的代码实现。(重点写思路、原理)
- 选择排序和快速排序算法原理和Python实现
- 选择排序原理及实现
- 【Java】数组的冒泡排序和选择排序(原理+代码实现)
- 《算法导论》2、选择排序实现(C++)
- 排序算法一:冒泡排序,插入排序以及选择排序原理与MATLAB实现
- 常见对象_数组高级选择排序原理图解、数组高级选择排序代码实现
- C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置
- 【排序算法】选择排序原理及Java实现
- 选择排序原理分析及Java实现
- 简单选择排序的原理与实现
- 选择排序—简单选择排序(Simple Selection Sort)原理以及Java实现
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- Python实现冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法(基于《算法导论》伪代码)
- 简单排序Java实现(一):冒泡排序,选择排序,插入排序(原理及实现)
- 算法导论Java实现-选择排序(习题2.2-2)
- 每日一算法之选择排序原理及实现
- PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
- Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现