纯粹个人的笔记,看到hadoop中的quickSort和headSort,发现原来的好东西都付之东流了,在此记一下下
------------------------------------
冒泡
一种实现可以:for 向后 for 内部向前
for(out = nElens-1;out>0;out--)
for(int i=0;i<out;i++)
if(a[i]>a[out])swap();
--------------------------------------
选择 冒泡的变形,使用标志,而不是替换,在内部结束时进行替换
一种实现可以:for 向前 for 内部向前
for(out=0;n<nElens-1;out++)
min = out;
for(int i=0;i<n;i++)
if(a[min]>a[i])min = i;
swap()
--------------------------------------
插入 跟前边有序列比较,找到合适的位置,进行错位
for(int out = 1; n< nElens; out++)
item = a[out];
int in = out;
while(in > 0 && a[in] > item)
a[out] = a[out-1];in--;
a[in] = item;
--------------------------------------
希尔 插入排序的改变,先进行分组,组内进行插入排序,知道分组数为1为止
int j;
for(int gap = data.length / 2; gap > 0; gap /= 2){
for(int i = gap; i < data.length; i++){
Comparable temp = data[i];
for(j = i; j >= gap && temp.compareTo(data[j - gap]) < 0; j -= gap){
data[j] = data[j - gap];
}
data[j] = temp;
}
}
--------------------------------------
转: http://blog.csdn.net/forrestgtju/article/details/7848829
快速 分区,递归在分区,每次分区确定一个基数位置,并将队列分两半
分区算法的一种实现:设left为基数位置,想跟right比较,再跟left比较,当left>=right,结束,并将基数放在left上int AdjustArray(int s[], int l, int r) //返回调整后基准数的位置
- {
- int i = l, j = r;
- int x = s[l]; //s[l]即s[i]就是第一个坑
- while (i < j)
- {
- // 从右向左找小于x的数来填s[i]
- while(i < j && s[j] >= x)
- j--;
- if(i < j)
- {
- s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑
- i++;
- }
- // 从左向右找大于或等于x的数来填s[j]
- while(i < j && s[i] < x)
- i++;
- if(i < j)
- {
- s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑
- j--;
- }
- }
- //退出时,i等于j。将x填到这个坑中。
- s[i] = x;
- return i;
- }
另一种实现快速排序,其实理论上都一样:
int left = i;