排序演算法總結

2021-06-23 00:23:55 字數 3624 閱讀 4374

package 排序;

/** * 歸併排序:使用遞迴演算法,分治演算法,把大的問題劃分為小的部分,然後遞迴求解

* @author sunfeilong1993

*/public class usemsort ;

integer c = b.clone();

msort(b,c,0,b.length);

for(integer i: b)

}//引數型別 陣列 陣列 int int

public static > void msort(t arr,t temparr,int first,int last)

//否則則把資料拷貝到temparr

int indexa = first;

int indexb = midpt;

int indexc = first;

//當兩個陣列都沒有遍歷完的時候,歸併演算法

while(indexa < midpt && indexb < last)

else

}//end while

//當b陣列歸併完的時候

while(indexa < midpt)

//當a陣列歸併萬的時候

while(indexb < last)

//複製到原來的陣列

for(int i = first ; i < last ; i++)

}//end if

}//end mosrt()

}//end main

/**

* 插入排序演算法策略:排序值列中的前2個值,並在必要時交換它們。

* 在相對於前2個值(有序的)的適當位置插入值列的第三個值。

* 然後,在相對於前3個值(有序的)的適當位置插入值列的第4個值。

* 每進行一次插入操作,有序子集中的數值個數將遞增1。重複該過程,

* 直至值列中的所有值都按照次序排列為止。插入過程需要移動陣列中的

* 其他值,為插入的元素騰出儲存空間。

*/public class useinsertsort ;

insertsort(b);

for(integer i: b)

}public static > void insertsort(t arr)

arr[j] = swap;

} }}

/**

*氣泡排序:從第乙個元素開始依次遍歷如果後面的元素比當前的小,

*則把當前的和後面的交換,最後確保第一次遍歷結束時最後乙個

*元素是最大的,第二次遍歷確定倒數第二個元素是最大的,以此類推。

*/public class bubble ;

bubblesort(a);

for(int i : a) }

public static void bubblesort(int arr)//end if

}//end for j

}//end for i

}//end bubblesort

}

/**

* 選擇排序:每一次選出剩餘的元素中的最小的元素對應的編號,然後和剩餘元素的

* 第乙個元素交換,最後生成有序的序列

*/public class useselectsort ;

selectsort(a);

for(int i : a)

}//end main

//選擇排序

public static void selectsort(int arr)

}//end for j

temp = arr[i];

arr[i] = arr[smallindex];

arr[smallindex] = temp;

}//end for i

}}

/**

* 二叉搜尋演算法:在有序陣列的基礎上進行查詢

* 把陣列從中間分為兩部分,然後判斷所查詢的目標在哪一部分,最後隨著

* 範圍的縮小就可能找到目標,也可能沒有目標。

*/public class usebinsearch ;

int b = binsearch(a, 0,a.length ,3);

system.out.println(b);

}//end main

//使用泛型

public static > int binsearch(t arr,int first,int last,t target)

else if(midvalue.compareto(target) > 0)

else

}// end while

return -1;

}//end binselect()

}//end main

/**

* 漢諾塔問題:使用遞迴求解

* */

public class usehanoi

private static void hanoi(int number ,string a,string b,string c)

else

}//ent method hanoi()

}

/**

* 快速排序:選取乙個基準,然後根據基準把大於基準的數放在左邊,

* 把小於基準的數放在右邊,然後把原有的陣列分為兩半,在進行排序

* 以此類推,最後得到乙個有序的序列。

*/public class quicksort ;

quicksort(a);

for(int i : a) }

public static > void quicksort( t arr)

public static > void qsort(t arr,int first,int last)//end if

//只有兩個元素則互換位置

else if(last - first == 2)

}//end else-if

//其他情況

else//end else

} public static > int pivotindex(t arr,int first,int last)

else if(first == last -1)

else

while(pivot.compareto(arr[scandown]) < 0)

if(scanup >= scandown)

temp = arr[scanup];

arr[scanup] = arr[scandown];

arr[scandown] = temp;

scanup++;

scandown--;

}//end for

arr[first] = arr[scandown];

arr[scandown] = pivot;

return scandown;

}//end else

}}

排序演算法總結

1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...

排序演算法總結

1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...

排序演算法總結

學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...