1.交換排序: 冒泡排序和快速排序
2.插入排序:直接插入 和折半插入 和希爾排序
3.選擇排序:簡單選擇排序和堆排序
4.歸併排序
冒泡排序:時間複雜度爲O(n2),而空間複雜度爲O(1)。
public static void bubbleSort(int[] nu){
for(int i=0;i<nu.length;i++){//元素的個數
for(int j=0;j<nu.length-i-1;j++){//需要比較的次數 如果有n個數,則需要n-1輪比較。9個數,比較8次。然後剩下8個數比較7次
if(nu[j]>nu[j+1]){//利用^ 異或運算符交換數據
nu[j]=nu[j]^nu[j+1];
nu[j+1]=nu[j]^nu[j+1];
nu[j]=nu[j]^nu[j+1];
}
}
}
}
快速排序:基於分治的思想,是冒泡排序的改進型.一般基準位是從0開始 .時間複雜度爲O(nlogn),而空間複雜度爲O(1)
public static void quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基準位
temp = arr[low];
while (i<j) {
//先看右邊,依次往左遞減
while (temp<=arr[j]&&i<j) {
j--;
}
//再看左邊,依次往右遞增
while (temp>=arr[i]&&i<j) {
i++;
}
//如果滿足條件則交換
if (i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//最後將基準爲與i和j相等位置的數字交換
arr[low] = arr[i];
arr[i] = temp;
//遞歸調用左半數組
quickSort(arr, low, j-1);
//遞歸調用右半數組
quickSort(arr, j+1, high);
}
參考:http://blog.csdn.net/as02446418/article/details/47395867
直接插入:
public class InsertSort{
public void insertSort(int[] array){
for(int i=1;i<array.length;i++)//第0位獨自作爲有序數列,從第1位開始向後遍歷
{
if(array[i]<array[i-1])//0~i-1位爲有序,若第i位小於i-1位,繼續尋位並插入,否則認爲0~i位也是有序的,忽略此次循環,相當於continue
{
int temp=array[i];//保存第i位的值
int k = i - 1;
for(int j=k;j>=0 && temp<array[j];j--)//從第i-1位向前遍歷並移位,直至找到小於第i位值停止
{
array[j+1]=array[j];
k--;
}
array[k+1]=temp;//插入第i位的值
}
}
}
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
if (i != array.length - 1) {
System.out.print(",");
}
}
}
}