希尔排序
public class ShellSort extends Object{
int data[]=new int[8];
int size=8;
public static void main(String[] args) {
ShellSort test=new ShellSort();
test.inputarr();
System.out.printf("你输入的原始数组是:");
test.showdata();
test.shell();
}
void inputarr() {
int i;
for (i=0;i<size;i++){//循环输入数组数据
try{
System.out.printf("请输入第"+(i+1)+"个元素:");
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader b=new BufferedReader(isr);
data[i] =Integer.parseInt(b.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
void showdata() {
int i;
for(i=0;i<size;i++){
System.out.printf(data[i]+" ");//打印数组数据
}
System.out.printf("\n");
}
void shell() {
int i;//i为扫描次数
int j;//以j来定位比较的元素
int tmp;//用来缓存数据
int k=1;//打印计数
int jmp;//设置间距位移量
jmp=size/2;
while (jmp!=0){
for(i=jmp;i<size;i++){
tmp=data[i];
j=i-jmp;
while (j>=0&&tmp<data[j]){//插入排序法
data[j+jmp]=data[j];
j=j-jmp;
}
data[jmp+j]=tmp;
}
System.out.println("第"+ (k++) +"次排序");
showdata();
jmp=jmp/2;//控制循环次数
}
}
}
插入排序
public class InsertSort extends Object{
int data[]=new int[6];
int size=6;
public static void main(String[] args) {
InsertSort test=new InsertSort();
test.inputarr();
System.out.printf("你输入的原始数组是:");
test.showdata();
test.insert();
}
void inputarr() {
int i;
for (i=0;i<size;i++){//循环输入数组数据
try{
System.out.printf("请输入第"+(i+1)+"个元素:");
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader b=new BufferedReader(isr);
data[i] =Integer.parseInt(b.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
void showdata() {
int i;
for(i=0;i<size;i++){
System.out.printf(data[i]+" ");//打印数组数据
}
System.out.printf("\n");
}
void insert() {
int i;//i为扫描次数
int j;//以j来定位比较的元素
int temp;//用来缓存数据
for(i=1;i<size;i++){//扫描循环次数为size-1
temp=data[i];
j=i-1;
while (j>=0 && temp<data[j]){//如果第二个元素小于第一个元素
data[j+1]=data[j];//就把所有元素往后推一个位置
j--;
}
data[j+1]=temp;//最小的元素放到第一个元素
System.out.printf("第"+i+"次扫描");
showdata();
}
}
}