一、o(n^2)的排序演算法
1.選擇排序 selection sort
先找到最小的
public static void selectsort(int arr)}}
}
2.氣泡排序 bubble sort
先找到最大的
public static void bubblesort(int arr)}}
}
3.插入排序 insertion sort
按索引位置,從前向後遍歷,將該元素與它前面的元素比較,將較小的與之交換
與選擇排序相比,可以提前終止內迴圈
public static void insersort(int arr)else }}
}
改進後插入排序,
public static void insertsort2(int arr)
arr[j] = temp;
}}
插入排序對於排序較為整齊的陣列排序效果很好,比選擇排序快
4.希爾排序 donald shell 縮小增量排序 o(n3/2)
public static void shellsort(int arr)
}}
二、o(nlog n) 的排序演算法
1.歸併排序 merge sort
(1)遞迴
public static void mergesort(int arr)
public static void merges(int arr,int l,int r)
}//將arr[l,mid] 和 arr[mid+1 , r]兩部分進行歸併
private static void merge(int arr, int l, int mid, int r)
int i = l,j = mid +1;
for (int k = l;k <= r;k ++)else if (j >r)else if (aux[i - l] (2)迭代,自底向上 適用於鍊錶的排序,因為沒有按陣列的索引取值
public static void mergesortbu(int arr)}}
private static void merge(int arr, int l, int mid, int r)
int i = l,j = mid +1;
for (int k = l;k <= r;k ++)else if (j >r)else if (aux[i - l] 2.快速排序 quick sort
快速排序在陣列近乎有序的時候,退化為o(n^2)
如果沒有遞迴停止條件,會導致棧溢位
(1)二路快排
public static void quicksort(int arr)
public static void quick(int arr,int l,int r)
//返回p 使得arr[l,p-1] 小於p 使得arr[p+1,r] 大於p
public static void swap(int arr,int i ,int j )
public static int partition(int arr,int l ,int r)
swap(arr,i,j);
while (i < j && arr[i] <= privot)
swap(arr,i,j);
}return i;
}
(2)三路快排,分為< = >
public static void quciksort3ways(int arr,int l ,int r)else if (arr[i] > v)else
}swap(arr,l,lt);
quciksort3ways(arr,l,lt -1);
quciksort3ways(arr,gt,r);
}
3.堆排序 演算法(一) 排序sorting
問題 輸入數字a1,a2,a3.an,使其公升序輸出。1 插入排序 insertion sort 演算法 這個演算法從陣列的第二個元素開始迴圈,將選中的元素與之前的元素一一比較,如果選中的元素小於之前的元素,則將之前的元素後移,最後再將選中的元素放在合適的位置。在這個演算法執行的過程中,總是保持著索...
java演算法(一) 排序演算法(上)
排序 sort 是將一組資料按照一定的規則來進行排列,一般按照遞增或者遞減的順序來進行排列。排序演算法是一種最基本的演算法,但是在實際應用中非常廣泛,對於初學程式設計人來說,排序演算法也是最基本的演算法之一。本節主要講解排序演算法中相對簡單的幾種,分別是 1 氣泡排序 2 選擇排序 3 插入排序 後...
演算法學習(一) 排序演算法
參考 排序 氣泡排序是一種很簡單也很常見的排序演算法,我們在初學程式語言,尤其是初學陣列的時候,應該都了解過氣泡排序,下面就當複習吧。public static void pubblesprt int array,int left,int right 氣泡排序 從陣列下標left開始,依次比較相鄰兩...