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 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...