java 数组排序小程序

package Test1;

public class SortDemo {

/**
  * 冒泡排序 数组角标从前往后走,大的数往后走1.
  *  基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,
  *  直到没有反序的数据元素为止。
  * @param arr 待排序数组
  *
  */
public static void Bubble(int[] arr){
  for(int i=1;i<arr.length;i++){
   for(int j=0;j<arr.length-i;j++){
    if(arr[j]>arr[j+1]){//
     //换位
     swap(arr,j,j+1);
    }
   }
  }
}
/**
  * 冒泡排序第二种方法 数组角标从后往前遍历,小的数往前跑
  * @param arr
  */
public static void Bubble2(int[] arr){
  //两两比较,外围循环为长度减1
  for(int i=0;i<arr.length-1;i++){
   for(int j=arr.length-1;j>i;j--){
    if(arr[j]<arr[j-1])
     swap(arr,j,j-1);
   }
  }
}
/**
  * 选择排序。基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,
  * 直到没有反序的数据元素为止。
  * @param arr
  */
public static void select (int[] arr){
  int min;//最小索引
  for(int i=0;i<arr.length-1;i++){
   min =i;//假设没轮的第一个元素师最小元素
    //从假设的最小元素的下一元素开始循环 
   for(int j=i+1;j<arr.length;j++){
    if(arr[min]>arr[j]){
     min=j;
    }
   }
   swap(arr,i,min);
  }
}

/**插入排序,从小到大顺序排列
  * 基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置
  * 使数列依然有序;直到待排序数据元素全部插入完为止。
  * @param arr
  */
public static void InsertSort(int[] arr){
  for(int i=0;i<arr.length-1;i++){
   //待插入的元素
   int insertElem = arr[i+1];
   for(int j=0;j<i+1;j++){
    //找到第一个比待插入元素insertElem大的数
    if(insertElem < arr[j]){
     //j位后已有序元素往后移动一位
     for(int x=i+1;x>j;x--){
      arr[x]=arr[x-1];
     }
     //在j位插入insertElem
     arr[j]=insertElem;
     break;
    }
   }
  }
}



/**
  * 数组中两个元素交换位置
  * @param arr
  * @param x
  * @param y
  */
public static void swap(int[] arr,int x,int y){
  int temp = arr[x];
  arr[x]=arr[y];
  arr[y]=temp;
}
/**
  * 打印数组
  * @param arr
  */
public static void sop(int[] arr){
  for(int i=0;i<arr.length;i++){
   System.out.println(arr[i]);
  }
}
public static void main(String[] args) {
  int[] arr = new int[]{5,2,1,22,14,7,9};
  //冒泡排序
  //Bubble(arr);
  //选择排序
  //select(arr);
  //插入排序
  InsertSort(arr);
  sop(arr);
 
}

}
package Test1;

public class SortDemo {

/**
* 冒泡排序 数组角标从前往后走,大的数往后走1.
* 基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,
* 直到没有反序的数据元素为止。
* @param arr 待排序数组
*
*/
public static void Bubble(int[] arr){
for(int i=1;i<arr.length;i++){
for(int j=0;j<arr.length-i;j++){
if(arr[j]>arr[j+1]){//
//换位
swap(arr,j,j+1);
}
}
}
}
/**
* 冒泡排序第二种方法 数组角标从后往前遍历,小的数往前跑
* @param arr
*/
public static void Bubble2(int[] arr){
//两两比较,外围循环为长度减1
for(int i=0;i<arr.length-1;i++){
for(int j=arr.length-1;j>i;j--){
if(arr[j]<arr[j-1])
swap(arr,j,j-1);
}
}
}
/**
* 选择排序。基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,
* 直到没有反序的数据元素为止。
* @param arr
*/
public static void select (int[] arr){
int min;//最小索引
for(int i=0;i<arr.length-1;i++){
min =i;//假设没轮的第一个元素师最小元素
//从假设的最小元素的下一元素开始循环
for(int j=i+1;j<arr.length;j++){
if(arr[min]>arr[j]){
min=j;
}
}
swap(arr,i,min);
}
}

/**插入排序,从小到大顺序排列
* 基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置
* 使数列依然有序;直到待排序数据元素全部插入完为止。
* @param arr
*/
public static void InsertSort(int[] arr){
for(int i=0;i<arr.length-1;i++){
//待插入的元素
int insertElem = arr[i+1];
for(int j=0;j<i+1;j++){
//找到第一个比待插入元素insertElem大的数
if(insertElem < arr[j]){
//j位后已有序元素往后移动一位
for(int x=i+1;x>j;x--){
arr[x]=arr[x-1];
}
//在j位插入insertElem
arr[j]=insertElem;
break;
}
}
}
}



/**
* 数组中两个元素交换位置
* @param arr
* @param x
* @param y
*/
public static void swap(int[] arr,int x,int y){
int temp = arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
/**
* 打印数组
* @param arr
*/
public static void sop(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
public static void main(String[] args) {
int[] arr = new int[]{5,2,1,22,14,7,9};
//冒泡排序
//Bubble(arr);
//选择排序
//select(arr);
//插入排序
InsertSort(arr);
sop(arr);

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值