排序算法---直接选择排序算法
2016-03-04 10:57
295 查看
选择排序算法的过程:
从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。
寻找最小的元素需要一个循环的过程,而排序又是需要一个循环的过程。算法的时间复杂度也是O(n*n)。
一共需要n次位置的交换和n^2/2次比较。空间复杂度是O(1).
选择排序算法是不稳定的,比如原序列为:2、2、4、3、1。排序后改变了原来相同元素(即元素2)的相对位置。
c++实现代码:
运行结果:
java版本:
从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。
寻找最小的元素需要一个循环的过程,而排序又是需要一个循环的过程。算法的时间复杂度也是O(n*n)。
一共需要n次位置的交换和n^2/2次比较。空间复杂度是O(1).
选择排序算法是不稳定的,比如原序列为:2、2、4、3、1。排序后改变了原来相同元素(即元素2)的相对位置。
c++实现代码:
#include <iostream> using namespace std; void selectRank(int array[], int length) { for(int i=0; i<length; i++) { int index = i; for(int j=i+1; j<length; j++) //主要是为了找到剩余元素的最小,需要n^2/2次比较 { if(array[j]<array[index]) { index=j; //寻址操作 } } //位置交换直接用STL的swap函数。 swap(array[i],array[index]); } } int main() { int data[] = {2, 1, 5, 4, 9}; int size = sizeof(data)/sizeof(int); selectRank(data, size); for(int i=0; i<size; i++) { cout << data[i]<<" "; } return 0; }
运行结果:
java版本:
public class selectSortTest { static void selectSort(int[] a) { for (int i = 0; i < a.length; i++) {//外层循环存放最小元素 int index = i; for (int j = i + 1; j < a.length; j++) {//内层循环寻找剩余元素中的最小的元素 if (a[j] < a[index]) { index = j; } } swap(a,i, index);//把较小的数放到当前的位置上 } } //java参数传递都是采用的值传递方式 public static void swap(int[] data, int a, int b) { int tmp=data[a]; data[a]=data[b]; data[b]=tmp; } public static void main(String[] args) { int[] array = { 2,1,56,3,2,1,8,9 }; selectSort(array); for (int i = 0; i < array.length; i++) { System.out.print(array[i]+"\t"); } } }
相关文章推荐
- JavaScript演示排序算法
- 算法之排序算法的算法思想和使用场景总结
- PHP版本常用的排序算法汇总
- JavaScript实现多种排序算法
- php 地区分类排序算法
- js三种排序算法分享
- Javascript中的常见排序算法
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
- 排序算法的javascript实现与讲解(99js手记)
- C++中十种内部排序算法的比较分析
- Java实现几种常见排序算法代码
- 浅谈javascript实现八大排序
- PHP常用的排序和查找算法
- JavaScript中九种常用排序算法
- STl中的排序算法详细解析
- 算法学习入门之使用C语言实现各大基本的排序算法
- PHP四种基本排序算法示例
- 排序算法之PHP版快速排序、冒泡排序
- JavaScript排序算法之希尔排序的2个实例
- Java常用排序算法及性能测试集合