------- android培訓、java培訓、期待與您交流! ----------
1.快速排序:它通過一趟排序將要排序的元素分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分元素分別進行快速排序,整個排序以遞歸的方式進行,從而最終使所有元素有序。
2.選擇排序:每一趟從待排序的元素中選出最小的一個元素,順序放在已排好序的數列的一端,直到全部待排序的元素變得有序。
3.冒泡排序:它通過不斷遍歷要排序的數列,每次比較兩個元素,交換順序錯誤的元素。一直重複遍歷交換直到沒有需要交換的元素爲止。由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。
package com.itheima;
/**
* 幾種簡單的排序算法的實現
* @author Ryan
*/
public class SortUtils {
/*
* 快速排序
* */
public static void quickSort(int[] arr,int low,int high)
{
int temp; //定義一個變量用於存放樞軸
int left = low,right = high;
if (low<high){
temp = arr[low];
//該循環完成了一趟排序,將大於樞軸的元素放在右邊,而小於樞軸的元素放在左邊
while(left!=right){
while(right>left&&arr[right]>temp) //從右往左尋找一個小於樞軸的元素
right--;
if(left<right){
arr[left] = arr[right]; //將這個找到的元素放在樞軸左邊
left++;
}
while(left<right&&arr[left]<temp) //從左往右尋找一個大於樞軸的元素
left++;
if(left<right){
arr[right] = arr[left]; //將這個找到的元素放在樞軸右邊
right--;
}
}
arr[left] = temp; //把樞軸放在正確的位置
quickSort(arr,low,left-1); //通過遞歸最終排序完成
quickSort(arr,left+1,high);
}
}
/*
*選擇排序
*內循環就結束一次,最值出現頭角標位置
*/
public static void selectSort(int[] arr)
{
for (int x=0; x<arr.length-1; x++)
{
for (int y=x+1; y<arr.length; y++)
{
if (arr[x]>arr[y])
swap(arr,x,y);
}
}
}
/*
* 冒泡排序:相鄰的兩個元素進行比較,如果符合條件就換位
* 內循環一次,最值出現在尾角標的位置
* */
public static void bubbleSort(int[] arr)
{
for (int x=0; x<arr.length-1; x++)
{
for (int y=0; y<arr.length-x-1; y++) //-x是爲了讓每一次比較的元素減少,-1是爲了防止角標越界
{
if (arr[y]>arr[y+1])
swap(arr,y,y+1);
}
}
}
//爲選擇排序和冒泡排序定義一個交換數組中元素的方法
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}