您的位置:首页 > 其它

1.1 选择排序:不断地选择剩余元素中的最小(大)者

2016-04-15 10:22 309 查看
思路:

找到剩余数组(A[I…A.length-1])中第i小的元素(0< =i < A.length)

将它与数组的下标为i的元素交换位置

如此循环,直到i > A.length-1

引自《算法》:

首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和字节交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此反复,直到将整个数组排序。

Java实现:

/***
1. 不使用额外空间交换两个数的值
2. 此方法有溢出的可能
3. @param a 数组
4. @param i 要交换的第一个数的下标
5. @param j 要交换的第二个数的下标
*/
private static void exch(int[] a,int i,int j)
{
a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
}

/**
6. 从小到大对数组进行选择排序
7. @param a 要排序的数组
*/
public static void sort(int[] a)
{
int N=a.length;
for (int i = 0; i < N; i++) {
int min=i;
for (int j = i+1; j < N; j++) {
if (a[j] < a[min]) {
min=j;
}
}
exch(a,i,min);
}
}


总结:

对于长度为N的数组,选择排序需要大约N次交换和Math.pow(N,2)/2次比较

运行时间与输入无关

数据移动是所有算法中最少的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: