常用排序算法

经常撕逼的一个问题,一个程序员联冒泡排序都写不出来....说实话,不经常用真有可能写不出来,这两个for循环很容易弄错,只能说明的就是实现原理。

注:看结果更好理解程序。。。

冒泡排序

package sort;

/**
 * 冒泡排序
 * @author mercy 
 * 前一个和后一个比较找出最大值,再依次找找除了最大值的下一个最大值。
 */
public class BubbleSort {
	public static void sort(int arr[]) {
		for (int i = 1; i < arr.length; i++){
			for (int j = 0; j < arr.length-i; j++) { //比的次数随着i的值越大次数越少
				if (arr[j] > arr[j + 1]) //值大的往后放,否则值小的往后放
					int temp;
					temp = arr[j + 1];
					arr[j + 1] = arr[j];
					arr[j] = temp;
				}
				
			}
			for (int m = 0; m < arr.length; m++) {
				System.out.print(arr[m] + " ");
			}
			System.out.println(" ");
		}
		System.out.println("数组长度为:" + arr.length);
	}
	public static void main(String[] args) {
		int[] arr = {5, 3, 9, 0, 6};
		BubbleSort.sort(arr);
	}

}

 结果:

3 5 0 6 9  
3 0 5 6 9  
0 3 5 6 9  
0 3 5 6 9  
数组长度为:5

选择排序 

package sort;
//选择排序  第0个和第1个第2个n个比较大小,第1个和第二个和第n个比较大小,找出最大值,依次找出剩余最大值
public class SelectSort {
      public static void sort(int[] arr){
          for(int i=0;i<arr.length-1;i++) {
              for(int j=i+1;j<arr.length;j++)
              {
                  if(arr[i]>arr[j])//值小的往前放,否则值大的往前放
                  {
                      int temp=arr[i];  
                      arr[i]=arr[j];
                      arr[j]=temp;
                  }
              }
              for(int m=0;m<arr.length;m++){
            	  System.out.print(arr[m]+" ");
              }
              System.out.println(" ");   
          }
          System.out.println("数组长度为:" + arr.length);
         
      }
      public static void main(String[] args) {
          int[]arr={5,3,9,0,6};
          SelectSort.sort(arr);   
      }

  }

 结果:

0 5 9 3 6  
0 3 9 5 6  
0 3 5 9 6  
0 3 5 6 9  
数组长度为:5

插入排序,插入排序的原理是:每一次将要排序的数插入前面已经排完序的队列中,直到全部记录插入为止。

插入排序有三种实现,一种是直接插入,一种是折半插入,一种是希尔排序。很好理解,代码真心不好写。



原文地址:https://www.cnblogs.com/JAYIT/p/4057536.html