請看文章:
排序經典集合:插入排序,氣泡排序,快速排序,選擇排序,程式碼簡單請看下面的基本介紹和程式碼
插入排序:直接插入排序是一種最簡單的排序方法,它的基本操作是將一個記錄插入到一排好序的有序表中 時間複雜度為:O(n^2)
package paixu;
/**
* 氣泡排序
* @author 肖華 [email protected]
*
*/
public class Charu {
public static void main(String[] args) {
int[] arr=new int[]{1,9,5,4,8,7,0,2,3,6};
for(int i=1;i<arr.length;i ){
int temp=arr[i];
// int j=i-1;//在arr[0]-arr[j-1]內為有序的元素
// while(j>=0){
// if(arr[j]>temp){
// arr[j 1]=arr[j];//往後移動
// j--;
// }else{
// break;//找到這個元素了
// }
// }
// arr[j 1]=temp;
int j=0;
for(j=i-1;j>=0;j--){
if(arr[j]>temp){
arr[j 1]=arr[j];//往後移動
}else{
break;//找到這個元素了
}
}//這個元素有可能是第一位
arr[j 1]=temp;//插入
}
print(arr);
}
public static void print(int[] arr){
for(int i=0;i<arr.length;i ){
System.out.print(arr[i]);
}
}
}
氣泡排序:氣泡排序是將前一個與臨近的一個元素比較,如果前者大於後者則交換順序,在一輪排序之後,最後一個是最大的,第二次倒數第二個最大,一次直到所有的序列都為有順序的數列 時間複雜度為:o(n^2)
package paixu;
/**
* 氣泡排序
* @author 肖華 [email protected]
*
*/
public class Maopao {
public static void main(String[] args) {
int[] arr=new int[]{1,9,5,4,8,7,0,2,3,6};
for(int j=0;j<arr.length-1;j ){
for(int i=0;i<arr.length-1;i ){
if(arr[i]>arr[i 1]){
int temp=arr[i 1];
arr[i 1]=arr[i];
arr[i]=temp;
}
}
}
print(arr);
}
public static void print(int[] arr){
for(int i=0;i<arr.length;i ){
System.out.print(arr[i]);
}
}
}
快速排序:快速排序運用到了分割的思想,通過一趟排序將帶排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,然後遞迴對這兩部分繼續分割排序,已達到整個序列有序 時間複雜度為:knln(n) 結合氣泡排序,可以降低至O(log(n));
package paixu;
/**
* 氣泡排序
* @author 肖華 [email protected]
*
*/
public class Quick {
public static void main(String[] args) {
int[] arr=new int[]{1,9,5,4,8,7,0,2,3,6};
qSort(arr, 0, 9);
print(arr);
}
public static void qSort(int[] arr,int low,int high){
if(low<high){
int middle=partition(arr, low, high);//分組
qSort(arr,low,middle);//遞迴排序
qSort(arr, middle 1, high);
}
}
public static int partition(int[] arr,int low,int high){
int key=arr[low];
while(low <high){
while(low<high&&arr[high]>=key){
high--;
}
//交換順序
int temp=arr[low];//此時arr[low]==key
arr[low]=arr[high];
arr[high]=temp;//此時arr[high]==key
while(low<high&&arr[low]<=key){
low ;
}
temp=arr[high];//此時arr[high]==key
arr[high]=arr[low];
arr[low]=temp;//此時arr[low]==key
}
return low;
}
public static void print(int[] arr){
for(int i=0;i<arr.length;i ){
System.out.print(arr[i]);
}
}
}
選擇排序:這個排序比較簡單,也很容易理解,通過n-i 1(i=1,2,..n-1)個記錄中選取關鍵字最小的記錄作為關鍵字,並和第i(1<=i<=n)個記錄交換 時間複雜度為O(n^2)
package paixu;
/**
* 氣泡排序
* @author 肖華 [email protected]
*
*/
public class Xuanze {
public static void main(String[] args) {
int[] arr=new int[]{1,9,5,4,8,7,0,2,3,6};
for(int i=0;i<arr.length;i ){
for(int j=i 1;j<arr.length;j ){
if(arr[i]>=arr[j]){//選擇最小的,保留在i位置
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
print(arr);
}
public static void print(int[] arr){
for(int i=0;i<arr.length;i ){
System.out.print(arr[i]);
}
}
}
以上程式碼複製即可執行,寫的很簡單,沒有什麼設計方法,有什麼不懂得可以留言一起探討
轉載之後請註明出處:http://blog.csdn.net/xh199110/article/details/39672835
飛天部落格
謝謝
写评论
很抱歉,必須登入網站才能發佈留言。