您的位置:首页 > 其它

直接插入排序与直接选择排序

2015-06-18 13:02 267 查看
直接插入排序和直接选择排序没啥可说的,上代码。

直接插入排序可以做一点点优化,即a[0]=temp,可以作为哨兵位,不用老是判断是否遍历到下标0了:

package sort;

public class InsertSort {
private long[] a;
private int elmentN;
public InsertSort(int max){
a=new long[max];
elmentN=0;
}

public void insert(long elment){
a[elmentN]=elment;
elmentN++;
}
public void display(){
for(int i=0;i<elmentN;i++){
System.out.print(a[i]+", ");

}
System.out.println();
}

public void insertSort(){
int i,j;
for(i=1;i<=elmentN-1;i++){
long temp=a[i];
j=i-1;
while(j>=0&&a[j]>temp){//为了避免判断j>=0 可以a[0]=temp 作为哨兵位
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
display();
}
}

public static void main(String args[]){
InsertSort bs=new InsertSort(10);
bs.insert(656);
bs.insert(541);
bs.insert(231);
bs.insert(63);
bs.insert(21);

bs.insertSort();
bs.display();
}
}


直接选择排序:在交换两个数的时候,swap函数可以不用中间变量,一点小小的技巧
package Sort;

public class SelectorSort {
public void selectorS(int a[],int n){
for(int i=0;i<n-1;i++){
int index=i;
for(int j=i+1;j<n;j++){
if(a[j]<a[index]){
index=j;
}
}
swap(a,i,index);
}
}

//不需要中间变量
private void swap(int a[],int i,int j){
<span style="white-space:pre">		</span><span style="font-family: Arial, Helvetica, sans-serif;">//当i==j时,会导致a[i]==a[j]==0</span><span style="white-space:pre">
</span><span style="white-space:pre">			</span>if(i!=j){
<span style="white-space:pre">	</span>a[i]^=a[j];
<span style="white-space:pre">	</span>a[j]^=a[i];
<span style="white-space:pre">	</span>a[i]^=a[j];
}
}

public static void main(String[] args){
int a[]={10,4,9,7,8,5,11,23,-1,-3,34,3,4,8};
SelectorSort ss=new SelectorSort();
ss.selectorS(a, a.length);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息