一、氣泡排序(bubble sort)
氣泡排序是排序中比較簡單的一種,基本的思想就是比較陣列中相鄰兩個數的大小。如果前面乙個比後面乙個數值大就交換位置。
迴圈一遍陣列,比較每一對相鄰的數。讓大的不斷沉下去,讓數值小的不斷冒上來,這樣就有點類似於冒泡這個思想。(下文中的a都是代表要排序的陣列)
//陣列中交換用的中間變數
int temp=0;
//迴圈遍歷陣列
for(int i=0;ia[j+1])
}}
二、選擇排序(chosesort)
選擇排序和氣泡排序特別像,不同的一點是選擇排序每次都在未排好序的序列裡面選出最小的,最後排成乙個公升序的陣列。
int temp=0;
for(int i=0;ia[j])
}}
三、插入排序(insertsort)
插入排序的基本思想就是將乙個未排序的序列中的數插入乙個已經排好序的子陣列中。依次迴圈,直到到達陣列末,把整個陣列排好序。
我們可以先把陣列的第乙個和第二個數進行一下比較,排好序,再以其作為乙個有序陣列,把後面沒排序的數依次插入有序陣列中。直到整個陣列排好序,也就是for到陣列末的時候。
//交換陣列值的中間變數
int temp=0;
for(int i=1;i=0&&a[j]>temp)
//將要插入的數放到整個後移了的陣列的前面因為上面做了j--,現在的下標應該是要插入的位置
a[j+1]=temp;
}
四、快速排序
快速排序的基本思想就是,先找乙個數作為基數,然後將陣列中其他的數與之進行比較,小的放在這個數的前面,大的放到這個數的後面。再將這個數的前面和後面的數當成單獨的陣列,
再進行同樣的操作,迭代到最後只剩乙個數的時候。
/**
* 排序的方法
* @param s 要排序的陣列
* @param l 第乙個位置
* @param r 陣列的最後乙個位置
*/public int sort(int a,int l,int r)
//如果找到了就跳出迴圈,並把值放入a[i]這個坑
a[i++]=a[j];
//從左到又尋找第乙個大於x的數
while(i
五、希爾排序(shellsort)
希爾排序有點類似於插入排序,在排序前,我們首先要獲得乙個步長(當前位置往後走的步數),一般是陣列的長度除以2;把當前的這個數與陣列在當前位置呢往後面走n個步長的值進行乙個插入排序。
int i,j,gap,n=a.length;
//步長,就是當前位置往後走的步數
for(gap=n/2;gap>0;gap/=2)
a[k+gap]=temp;}}
}}
希爾排序的優化的寫法
/**
* 從第乙個步長資料開始,依次對每個元素與自己組內的資料進行直接插入排序
* 對上面的優化
* @param a
*/public void sort2(int a)
a[k+gap]=temp;}}
} }
六、歸併排序(mergesort)
歸併排序是將兩個(或兩個以上)有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。
歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。 將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2-路歸併
歸併排序演算法穩定,陣列需要o(n)的額外空間,鍊錶需要o(log(n))的額外空間,時間複雜度為o(nlog(n)),演算法不是自適應的,不需要對資料的隨機讀取。
public static void main(string args) ;
sort(a, 0, a.length-1);
} public static void sort(int a, int left, int right)
public static void merge(int data, int left, int center, int right)
// 剩餘部分依次放入臨時陣列
while (mid <= right)
while (left <= center)
// 將臨時陣列中的內容複製回原陣列
for (int i = tmp; i <= right; i++)
system.out.println(arrays.tostring(data));
}
簡單排序java實現
一.氣泡排序 每次遍歷比較兩個相鄰的值,降序互換,依次進行,這樣較大的值像氣泡一樣逐漸浮向頂部。public class bubblesort public static void main string args bubblesort list for int i 0 i 二.選擇排序 每一次遍歷...
快速排序java簡單實現
快速排序簡單實現 將陣列的某一段元素進行劃分,小的在左邊,大的在右邊 param a 陣列 param start 開始的位置 param end 結束的位置 return 基準值的位置 public static intdivide int a,int start,int end 上面的while...
2015 6 9 快速排序的java簡單實現
快速排序的思想不知道怎麼描述,那麼就直接貼 吧。做個筆記。public class quicksort sort a,0,a.length 1 for int i 0 i right return if left 0 right a.length 1 return int i left int j ...