问题1:
在插入排序中用一个循环嵌套算法将数组中的每一项和其他项相比较,如相同就删除相同的数据项
方法(假设所有数组中的值都是正数)当碰到相同的项时候把这个项设置为-1,然后在后面的插入排序中就会把
它移到0的位置处,下一个相同的数据移到1处,依此类推,重复的数据项都移到开始处,然后在缩小数组的范围把需要的数据移到下标0处
问题2:
奇偶排序:思路是在数组中重复两躺扫描,第一躺扫描所有的数据项对,a[j]和a[j+1] (j是奇数j=1,3,5...)
如果它们的值次序颠倒就交换它们,第2躺扫描所有的偶数数据项进行相同的操作,(j=2,4,6...),重复进行这样的两躺的排序直到所有数据都有序
问题3
冒泡排序中是把大的(按大小排序)从左移到右边,我现在想两方面同时移动,把最大的放在最右边后,然后在最小的放在左边,也就是说可以双向移动的!这样的算法该怎么写?
我的原程序如下:在里面请高人添加上我上面说的算法
class Sort{
private int []a;
private int end;
Sort(int size){
a=new int[size];
end=0;
}

public void insert(int value){
a[end]=value;
end++;
}

void display(){
for(int i=0;i<end;i++){
System.out.print(a[i]+"\t");
}
System.out.println();

}

/* void sort(){ //冒泡排序最右边都是排序好的不用在排序
int i,j,k=0;
for(i=end-1;i>0;i--){
for(j=k;j<i;j++){  
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;}}}
} */
/*void sort(){ //选择排序最左边都是有序的不需要在排序
int i,j,min,temp;
for(i=0;i<end-1;i++){
min=i;
for(j=i+1;j<end;j++){
if(a[j]<a[min]){
min=j;}
}
temp=a[i];
a[i]=a[min];
a[min]=temp; }
}  */

void sort(){//插入排序
int i,j,temp;
for(i=1;i<end;i++){
temp=a[i];
j=i;
while(j>0&&a[j-1]>=temp){
a[j]=a[j-1];
j--;
}
a[j]=temp;
}


}

}class Demo{
public static void main(String []args){
Sort arr=new Sort(20);
arr.insert(300);
arr.insert(200);
arr.insert(20);
arr.insert(400);
arr.insert(10);
arr.insert(30);
arr.insert(40);
arr.display();
arr.sort();
arr.display();

}
}