用JAVA写的插入排序
来源:互联网 发布:java quartz 编辑:程序博客网 时间:2024/06/11 16:08
public class ShellSort {
public static void shell(int []s,int l){ //希尔排序
int n=l+1,i,j;
// System.out.println(n+"=======");
for(l=l/2;l>=1;l=l/2){ //设置每次组距,直到组距为1时说明已经排序好
// System.out.println(l+"=======");
for( i=l+1;i<n;++i)//每个元素相差组距距离的直接插入排序例如 数组a[]={0,4,3,2,1}; 当L=2时a[1],a[3]位一组进行插入排序
if(s[i]<s[i-l]){
s[0]=s[i];
for( j=i-l;j>0&&s[0]<s[j];j-=l) //进行移位
{ s[j+l]=s[j];
// System.out.println("j的值:"+j);
for(int a=0;a<5;a++){
// System.out.print(s[a]+"***");
}
// System.out.println();
}//
// System.out.println("j最后值"+j);
s[j+l]=s[0];//最后经值赋给空出来的位置
}//if
}
// return s;
}
public static void insertSort(int []s,int l ){ //直接插入排序s[0]不存放数据
int i,j;
for(i=2;i<=l;i++){ //依次将s[2]~s[n]插入前面已排序序列
if(s[i]<s[i-1]){
s[0]=s[i]; //复制为哨兵
for(j=i-1;s[0]<s[j];--j) //向后移位
s[j+1]=s[j];
s[j+1]=s[j];
}//if
}
}
public static void insertSortM(int []s,int l){//折半插入排序 思想:利用折半查找的原理先找到要插入的
//位置 ,再进行移动
int i,j,mid,low,high;
for(i=2;i<=l;i++){
if(s[i]<s[i-1]){
s[0]=s[i];
low =1;high=i-1;
while(low<=high){
mid=(low+high)/2;
if(s[0]>s[mid])
low=mid+1;
else
high=mid-1;
}//while
for(j=i-1;j>=high+1;j--)
s[j+1]=s[j];
s[high+1]=s[0];
}//if
}//for
}
public static void main(String[] args) {
int a[]={0,4,3,2,1};
int b[]={0,4,3,2,1};
int c[]={0,4,3,2,1};
shell(a,4);
//************************************************
System.out.println("希尔排序\n");
shell(a,4);
for(int i=0;i<5;i++){
System.out.print(a[i]+"***");
}
System.out.println();
//************************************************
System.out.println("折半插入排序\n");
insertSortM(b,4);
for(int i=0;i<5;i++){
System.out.print(b[i]+"***");
}
System.out.println();
//************************************************
System.out.println("直接插入排序\n");
insertSort(c,4);
for(int i=0;i<5;i++){
System.out.print(c[i]+"***");
}
}
}
public static void shell(int []s,int l){ //希尔排序
int n=l+1,i,j;
// System.out.println(n+"=======");
for(l=l/2;l>=1;l=l/2){ //设置每次组距,直到组距为1时说明已经排序好
// System.out.println(l+"=======");
for( i=l+1;i<n;++i)//每个元素相差组距距离的直接插入排序例如 数组a[]={0,4,3,2,1}; 当L=2时a[1],a[3]位一组进行插入排序
if(s[i]<s[i-l]){
s[0]=s[i];
for( j=i-l;j>0&&s[0]<s[j];j-=l) //进行移位
{ s[j+l]=s[j];
// System.out.println("j的值:"+j);
for(int a=0;a<5;a++){
// System.out.print(s[a]+"***");
}
// System.out.println();
}//
// System.out.println("j最后值"+j);
s[j+l]=s[0];//最后经值赋给空出来的位置
}//if
}
// return s;
}
public static void insertSort(int []s,int l ){ //直接插入排序s[0]不存放数据
int i,j;
for(i=2;i<=l;i++){ //依次将s[2]~s[n]插入前面已排序序列
if(s[i]<s[i-1]){
s[0]=s[i]; //复制为哨兵
for(j=i-1;s[0]<s[j];--j) //向后移位
s[j+1]=s[j];
s[j+1]=s[j];
}//if
}
}
public static void insertSortM(int []s,int l){//折半插入排序 思想:利用折半查找的原理先找到要插入的
//位置 ,再进行移动
int i,j,mid,low,high;
for(i=2;i<=l;i++){
if(s[i]<s[i-1]){
s[0]=s[i];
low =1;high=i-1;
while(low<=high){
mid=(low+high)/2;
if(s[0]>s[mid])
low=mid+1;
else
high=mid-1;
}//while
for(j=i-1;j>=high+1;j--)
s[j+1]=s[j];
s[high+1]=s[0];
}//if
}//for
}
public static void main(String[] args) {
int a[]={0,4,3,2,1};
int b[]={0,4,3,2,1};
int c[]={0,4,3,2,1};
shell(a,4);
//************************************************
System.out.println("希尔排序\n");
shell(a,4);
for(int i=0;i<5;i++){
System.out.print(a[i]+"***");
}
System.out.println();
//************************************************
System.out.println("折半插入排序\n");
insertSortM(b,4);
for(int i=0;i<5;i++){
System.out.print(b[i]+"***");
}
System.out.println();
//************************************************
System.out.println("直接插入排序\n");
insertSort(c,4);
for(int i=0;i<5;i++){
System.out.print(c[i]+"***");
}
}
}
0 0
- 用JAVA写的插入排序
- java写的排序(冒泡排序,插入排序,选择排序,快速排序)
- 我写的插入排序
- 自己写的插入排序
- java的插入排序
- java的插入排序
- Java的插入排序
- 用Scala瞎写的直接插入排序算法
- 用JAVA实现的插入排序
- 自己写的插入排序c++实现!
- for循环写的插入排序
- while循环写的插入排序
- 自己写的 傻瓜 插入排序
- 用模板写插入排序-数组
- 用模板写插入排序-链表
- C++写插入排序
- Java实现的插入排序
- java插入排序的实现
- hihoCoder week 85 Numeric Keypad 【DFS】
- 1019. General Palindromic Number (20)
- String类型
- 代码检测工具(一)FindBugs、PMD和CheckStyle概况、安装
- PHP数值的保留2位小数和四舍五入
- 用JAVA写的插入排序
- 代码检测工具(二)findbugs学习
- am335x嵌入式开发-GPIO操作
- spring mvc 的两种配置方式继承controller和xml配置delegate
- 开发环境配置(一) Flash Builder4.6 破解方法的实践
- 深入理解Linux内核 Memory Addressing Chapter-2
- 【Hibernate】映射关系总结
- ccsv6添加simulator功能
- 数据库邮件发送