这算哪种排序法???

只会百度的程序员 发布于 2013/03/05 14:29
阅读 473
收藏 0
private int[] arr;
public void selectSort(){
    int len = arr.length;
    for(int i=0;i<len-1;i++){
        for(int j = i + 1; j<len;j++){
            if(arr[j] > arr[i]){
                int tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
    }
}
加载中
0
铂金小鸟
tinyhare
tinyhare
不是冒泡,请看http://www.oschina.net/code/snippet_104837_1490
只会百度的程序员
只会百度的程序员
回复 @中山野鬼 : 说不上来。。。。
中山野鬼
中山野鬼
回复 @只会百度的程序员 : 有啥不一样的?
只会百度的程序员
只会百度的程序员
感觉有点不一样。。。
0
只会百度的程序员
只会百度的程序员

引用来自“铂金小鸟”的答案

冒泡
// 1、冒泡排序
	public void bubbleSort(){
		int len = arr.length;
		for(int i = 1; i < len; i ++){
			for(int j = 0; j < i; j++){
				if(arr[j] < arr[i]){
					int tmp = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp;
				}
			}
		}
	}
0
W
WTX

貌似是想用冒泡,但好像写错了

只会百度的程序员
只会百度的程序员
能正常处理排序。。。。应该是冒泡,只不过是我写反了。。。
0
只会百度的程序员
只会百度的程序员
好吧,不规范的代码害死人。看书上写选择排序,因为最后交换数据的时候是在外循环里的,不过书上的嵌套缩进不对,导致我自己写的时候怎么都排不好顺序,只好自己慢慢修改,就成了现在的样子,不伦不类的。。。
0
南湖船老大
南湖船老大
山寨冒泡而已,不是真正的冒泡,实际上属于选择排序。看第二层循环就知
只会百度的程序员
只会百度的程序员
回复 @tinyhare : 冒泡我知道,我是说这个跟冒泡的原理差不多,都是发现满足比较条件就立即调整位置。
tinyhare
tinyhare
回复 @只会百度的程序员 : 这是冒泡:http://www.oschina.net/code/snippet_104837_1490,两层循环一个增变量i一个减变量j,交换部分只用内层循环变量j。
只会百度的程序员
只会百度的程序员
我本意就是想写个选择排序,不过选择排序只会调整一次位置,这个是每次发现可以调整位置就会立即调整。。。应该跟冒泡类似吧。。。
0
CoserSeu
CoserSeu
看这两层for循环就知道是冒泡啊。
0
依然傻笑
依然傻笑
有才啊,哈哈~~~
0
8
870177103
本质是选择排序,是用a[i]代替record变量的记录功能,实际上速度还变慢了
只会百度的程序员
只会百度的程序员
慢是慢了。。。毕竟每次都交换数据了。。。这本来就是一个错误,不好意思了。。。
0
8
870177103
int SelectionSort (const PDATA pdtArr ,const COUNT ctArr) { DATA dtTemp ; PDATA pdtCurrent ,pdtLoop ,pdtNext ,pdtRecord ; if (pdtArr == NULL OR ctArr < SORT_CTARR_MIN OR ctArr > SORT_CTARR_MAX) //Check Inlegal Parameters return ERROR ; const PDATA pdtFirst = pdtArr ; const PDATA pdtOver = pdtFirst + ctArr ; for (pdtNext = (pdtCurrent = pdtFirst) + 1 ; pdtNext < pdtOver ; pdtCurrent = pdtNext++) { pdtRecord = pdtCurrent ; for (pdtLoop = pdtNext ; pdtLoop < pdtOver ; pdtLoop++) #ifdef SORT_ZORDER_DOWN if (*pdtLoop > *pdtRecord) #else if (*pdtLoop < *pdtRecord) #endif pdtRecord = pdtLoop ; if (pdtRecord != pdtCurrent) { dtTemp = *pdtCurrent ; *pdtCurrent = *pdtRecord ; *pdtRecord = dtTemp ; } } return 0 ; //Return Successfully } 只会c的程序员
0
散装海盗
散装海盗
这个是选择排序,区分冒泡和选择最常用的方法是看内层循环的边界以及是升序还是降序
返回顶部
顶部