`
javaksing
  • 浏览: 7598 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java排序(一)

    博客分类:
  • Java
阅读更多
package com.everyday;

public class InsertSort {

/**插入排序
* @param args
* 插入排序是一种通过不断地把新元素插入到已排好序的数据中的排序算法,
* 常用的插入排序算法包括直接插入排序和shell排序,直接插入排序实现比较简单,
* 时间复杂度是O(n),但是直接插入没有充分的利用已插入的数据已经排序这个事实,
* 因此有很多针对直接插入排序改进的算法,例如折半插入排序等,下边是直接插入排
* 序的Java实现:
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] elements={4,8,7,6,5,9,3,0,1,6};
for(int i=1;i<elements.length;i++){
int j=-1;
while(j <= i && elements[i] > elements[++j]);
if(j<i){
int temp=elements[i];
for(int k=i-1;k>=j;k--){
elements[k+1]=elements[k];
}
elements[j]=temp;
}
}
System.out.println("排序后: ");
for(int i=0;i<elements.length;i++){
System.out.print(" "+elements[i]);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////
package com.everyday;
/*
* 选择排序是常用内部排序的一种,常见的实现算法有直接选择排序算法和堆排序算法,选择排序的基本思想是每次从待排数据中选择第n小的数据放到排序列表的第n个位置,假如共有N个数据待排,那么经过N-1次排序后,待排数据就已经按照从小到大的顺序排列了。

  直接选择排序算法的思想比较简单:(假设数据放在一个数组a中,且数组的长度是N)

  1:从a[0]-a[N-1]中选出最小的数据,然后与a[0]交换位置

  2:从a[1]-a[N-1]中选出最小的数据,然后与a[1]交换位置(第1步结束后a[0]就是N个数的最小值)

  3:从a[2]-a[N-1]中选出最小的数据,然后与a[2]交换位置(第2步结束后a[1]就是N-1个数的最小值)

  以此类推,N-1次排序后,待排数据就已经按照从小到大的顺序排列了。
*/
public class SelectSort {
public static void main(String[] args){
int[] elemnets={1,3,5,7,8,2,0,4,6};
System.out.println("排序前:");
for(int i=0;i<elemnets.length;i++){
System.out.print(" "+elemnets[i]);
}
for(int i=0;i<elemnets.length-1;++i){
int k=i;
for(int j=i;j<elemnets.length;++j){
if(elemnets[k]>elemnets[j]){
k=j;
}
}
if(k!=i){
int temp=elemnets[i];
elemnets[i]=elemnets[k];
elemnets[k]=temp;
}
}
System.out.println("排序后:");
for(int i=0;i<elemnets.length;i++){
System.out.print(" "+elemnets[i]);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////
package com.everyday;

public class BubbleSort {

/**冒泡排序
* @param args
* 它是交换式排序算法的一种.将小的值"浮"到上面,将大的值"沈"到底部的一种排序方法.
* n个元素的排序将进行n-1轮循环,在每一轮排序中相邻的元素进行比较,如果左边的小于
* 或等于右边的,将保持原位置不变,如果左边的大于右边的,将这两个右边的元素的位置交换.
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array= new int[]{4,8,7,6,5,9,3,0,1,6};
int i,j,temp;
  System.out.println(" 排序前: ");
  for(int a=0;a<array.length;a++){
  System.out.print(" "+array[a]);
  }
  //n个元素的数组进行n-1轮排序
  for(i=0;i<array.length-1;i++)
  {
  //因为每一轮循环将确定一个数组元素的位置,
  //所以每一轮的比较次数将会递减
   for(j=0;j<array.length-i-1;j++)
   {
   if(array[j]>array[j+1])
   {
   //如果第j个元素比它后面的相邻的元素大的话就交换
   temp=array[j];    
   array[j]=array[j+1];
   array[j+1]=temp;
   }
   }
  }
  System.out.println();
  System.out.println(" 排序后: ");
  for(int a=0;a<array.length;a++){
  System.out.print(" "+array[a]);
  }
 
}

}
//////////////////////////////////////////////////////////////////////////////////////////////////
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics