您的位置:首页 > 其它

插入排序和希尔排序

2018-01-15 17:01 141 查看
/**
* @author shenqi
* @date 2018/1/15.
*/

/**
* 插入排序
* 每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止。
* 从第一个元素开始,该元素可以认为已经被排序
* 取出下一个元素,在已经排序的元素序列中从后向前扫描
* 如果该元素(已排序)大于新元素,将该元素移到下一位置
*/
public static void insertSort(int [] numbers){
int size = numbers.length;
int temp = 0;
int j = 0;
for (int i = 0 ; i < size ; i++){
temp = numbers[i];
//假如temp比前面的值小,则将前面的值后移
for (j = i ;j > 0 && temp < numbers[j-1] ; j--){
numbers[j] = numbers[j-1];
}
numbers[j] = temp;
}
}

/**
* 希尔排序
* 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序
* 首先将数组进行分组,然后将较大值移到前面,较小值移到后面,最后将整个数组进行插入排序
* 这样比起一开始就用插入排序减少了数据交换和移动的次数,可以说希尔排序是加强版的插入排序
*
*/

public static  void shellSort(int [] data){
int j = 0;
int temp = 0;
//每次将步长缩短为原来的一半
for (int increment = data.length/2 ; increment > 0 ;increment /= 2){
for (int i = increment ; i < data.length ; i++){
temp = data[i];
for (j = i ; j >= increment ; j -= increment){
if (temp < data[j -increment]){
data[i] = data[j-increment]
}else {
break;
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: