一、選擇排序法
簡單選擇排序是最簡單直觀的一種演算法,基本思想為每一趟從待排序的資料元素中選擇最小(或最大)的乙個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序。
for (int i = 0; i < arr.length - 1; i++)
}}簡單選擇排序通過上面優化之後,無論陣列原始排列如何,比較次數是不變的;對於交換操作,在最好情況下也就是陣列完全有序的時候,無需任何交換移動,在最差情況下,也就是陣列倒序的時候,交換次數為n-1次。綜合下來,時間複雜度為
)
二、氣泡排序
氣泡排序的基本思想是,對相鄰的元素進行兩兩比較,順序相反則進行交換,這樣,每一趟會將最小或最大的元素「浮」到頂端,最終達到完全有序
for (int i = 0; i < arr.length - 1; i++)}if (flag)
}
根據上面這種冒泡實現,若原陣列本身就是有序的(這是最好情況),僅需n-1次比較就可完成;若是倒序,比較次數為 n-1+n-2+...
+1=n(n-1)/2,交換次數和比較次數等值。所以,其時間複雜度依然為o(n2
)。綜合來看,氣泡排序效能還還是稍差於上面那種選擇排序的。簡單插入排序在最好情況下,需要比較n-1次,無需交換元素,時間複雜度為o(n);在最壞情況下,時間複雜度依然為o(n2)。但是在陣列元素隨機排列的情況下,插入排序還是要優於上面兩種排序的。三、插入排序
直接插入排序基本思想是每一步將乙個待排序的記錄,插入到前面已經排好序的有序序列中去,直到插完所有元素為止。
}
public class shellsort ;----------------------歸併之分治11 sort(arr);
12 system.out.println(arrays.tostring(arr));
13 int arr1 =;
14 sort1(arr1);
15 system.out.println(arrays.tostring(arr1));
16 }
17 18 /**
19 * 希爾排序 針對有序序列在插入時採用交換法
20 * @param arr
21 */
22 public static void sort(int arr)(希爾增量),其最壞時間複雜度依然為o(n2)
五、堆排序
堆排序是利用堆這種資料結構而設計的一種排序演算法,堆是完全二叉樹,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為o(nlogn),它也是不穩定排序。首先簡單了解下堆結構。
總結堆排序:
a.將無需序列構建成乙個堆,根據公升序降序需求選擇大頂堆或小頂堆;
b.將堆頂元素與末尾元素交換,將最大元素"沉"到陣列末端;
c.重新調整結構,使其滿足堆定義,然後繼續交換堆頂元素與當前末尾元素,反覆執行調整+交換步驟,直到整個序列有序。
public class heapsort ;
sort(arr);
system.out.println(arrays.tostring(arr));
}public static void sort(int arr)
//2.調整堆結構+交換堆頂元素與末尾元素
for(int j=arr.length-1;j>0;j--)
}/**
* 調整大頂堆(僅是調整過程,建立在大頂堆已構建的基礎上)
* @param arr
* @param i
* @param length
*/public static void adjustheap(int arr,int i,int length)else
}arr[i] = temp;//將temp值放到最終的位置
}/**
* 交換元素
* @param arr
* @param a
* @param b
*/public static void swap(int arr,int a ,int b)
}六、歸併排序
上層鋪蓋顏色的部分是「分」 下層無顏色部分是「治」
使用分治法的兩路合併排序演算法:
就是將待排序的元素序列一分為二,得到長度基本相等的兩個子串行,分別排序。如果子串行較長,還可繼續細分,直到子串行的長度不超過1為止。當分解所得的子串行已排列有序時,將兩個有序子串行合併成乙個有序子串行,得到原問題的解。
-------------------歸併之合併
合併方法:
比較兩序列中的最小值,輸出其中較小者,然後重複此過程,直到其中乙個隊列為空時,
如果另乙個佇列還有元素沒有輸出,則將剩餘元素依次輸出
#include
#define n 100
int merge(int *a, int left,int mid,int right)
;i=left;
j=mid+1;
while(i<=mid&&j<=right) /*把兩個序列中小的部分先輸入到中間陣列*/
return 0;
}int main()
,i,n;
printf("please input the length of the list:\n");
scanf("%d",&n);
printf("please input the number of the list:\n");
for(i=0;i
六種基本排序方式
package new03 public class demo4 sop 原序列的結果是 for int x nums sop n selectsort nums insertsort nums bubblesort nums quicksort nums shellsort nums heapso...
六種qsort排序方法
本文中排序都是採用的從小到大排序 一 對int型別陣列排序 int num 100 sample int cmp const void a const void b qsort num,100,sizeof num 0 cmp 二 對char型別陣列排序 同int型別 char word 100 s...
六種排序的C 實現
class sortnum 具體實現 view plain copy to clipboard print?include sortnum.h include iostream.h construction destruction sortnum sortnum sortnum sortnum 交換...