直接插入排序:
package InsertSort;
//插入排序之直接插入排序
//直接插入排序基本思想
//在要排序的一组数中,假设n-1个数已经排好,将第n个数插入到已经排好的序列中
//如此反复循环,直至所有的数排好。
public class DirectInsertSort {
public int[] insertSort(int[] data){
//两层for循环
//一组数,先是获得这组数中的第i个数,放置在tmp变量中,然后用第i个数与i个之前数比较
int i,j;
for(i = 1;i<data.length;i++){
int tmp = data[i];
for(j = i;j>0 && tmp<data[j-1];j--){
data[j] = data[j-1];
}
data[j] = tmp;
}
return data;
}
public String toString(int[] data){
if(data.length==0){
return "[]";
}else{
StringBuilder sb = new StringBuilder("[");
for(int i = 0;i<data.length;i++){
sb.append(data[i]+",");
}
int len = data.length;
return sb.toString()+"]";
}
}
public String toString1(int[] data,int k){
if(data.length==0){
return "[]";
}else{
StringBuilder sb = new StringBuilder("[");
for(int i = 0;i<k;i++){
sb.append(data[i]+",");
}
//int len = data.length;
return sb.toString()+"]";
}
}
public static void main(String[] args){
int[] data = {5,2,3,8,1,9,10,6,4};
DirectInsertSort dis = new DirectInsertSort();
System.out.println(dis.toString(dis.insertSort(data)));
System.out.println(dis.toString1(dis.insertSort(data),5));
}
}
希尔排序:
package InsertSort;
//插入排序之希尔排序
//希尔排序的本质仍为插入排序,通过增量的设置提高了效率
//增量的设置设为d1=N/2,是将待排序数组分为若干个子数组,再进行直接插入排序
//然后增量设置为d2=d1/2,再进行插入排序,直至增量为1,进行直接插入排序,结束操作
public class shellSort {
public int[] shellSortTest(int[] data){
int tmp;//将待插入元素存入一空间内
int i,j=0;
int x = 0;
double d = data.length;
while(true){
//将待排序数组分为d1个字数组
d = Math.ceil(d/2);
int d1 = (int)d;
//取出子数组中的元素
for(i=0;i<data.length;i++){
for(j=i+d1;j<data.length;j+=d1){
tmp = data[j];
for(x=j-d1;x>=0&&tmp<data[x];x-=d1){
//如果待排序元素x小于x-d1元素
data[x+d1] = data[x];
}
data[x+d1] = tmp;
}
}
if(d==1)
break;
}
return data;
}
public String toString(int[] data){
if(data.length==0){
return "[]";
}else{
StringBuilder sb = new StringBuilder("[");
for(int i = 0;i<data.length;i++){
sb.append(data[i]+",");
}
int len = sb.length();
sb.delete(len-1,len);
return sb.toString()+"]";
}
}
public static void main(String[] args){
int[] data = {1,54,6,3,78,34,12,45,56,100};
shellSort dis = new shellSort();
System.out.println(dis.toString(dis.shellSortTest(data)));
}
}