您的位置:首页 > 其它

排序算法---直接选择排序算法

2016-03-04 10:57 295 查看
选择排序算法的过程

从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。

寻找最小的元素需要一个循环的过程,而排序又是需要一个循环的过程。算法的时间复杂度也是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");
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息