黑马程序员技术交流社区
标题: 选择排序的问题 [打印本页]
作者: paul20150103 时间: 2015-12-1 12:58
标题: 选择排序的问题
选择排序的流程是怎么样的, 原理是咋样的, 它和冒泡排序谁的效率会高些? 他们分别用在哪些场合?
作者: ZXY66452 时间: 2015-12-1 17:00
这是选择排序。先用a[0]与a[1]比较,当a[0]<a[1]时并不交换,而用tmp记下来现在a[0]最小……这样一趟比较完后a[tmp]就是整个数组中最小的元素,把它与a[0]交换;第二趟,从a[1]开始重复前面的操作,那么最后a[1]就是剩下的n-1个元素中最小的……看a[0]、a[1]已经由小到大排好了,当做完n-1趟时不就把整个数组都排好了 int a[5] = {5,4,3,2,1};
int tmp;
// 选择排序
for (int k = 0; k < 4; k++) {
tmp = k;
for (int i = k; i < 5; i++) {
if (a < a[tmp]) {
//记录最小数位置
tmp = i;
}
}
//交换tmp与k位置
if (tmp != k) {
a[tmp] = a[tmp] + a[k];
a[k] = a[tmp] - a[k];
a[tmp] = a[tmp] - a[k];
}
}
选择排序总是会比冒泡排序效率高,因为选择排序每轮至多只交换1欢,但从算法角度考虑,时间复杂度并没有什么改进,因为都是O(n^2)算法具体应用看情况 看样本的多少
作者: paul20150103 时间: 2015-12-2 19:41
这个代码能实现吗
作者: 我就静静的听 时间: 2015-12-2 20:59
不懂,疑惑中
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |