1.氣泡排序
2.簡單選擇排序(直接排序)
3.快速排序
4.shell排序(不太熟練)
5.歸併排序(不太熟練)(對**理解還不到位)
一:氣泡排序
演算法思想:
從陣列中第乙個數開始,依次遍歷陣列中的每乙個數,通過相鄰比較交換,每一輪迴圈下來找出剩餘未排序數的中的最大數並」冒泡」至數列的頂端。
演算法步驟:
(1)從陣列中第乙個數開始,依次與下乙個數比較併次交換比自己小的數,直到最後乙個數。如果發生交換,則繼續下面的步驟,如果未發生交換,則陣列有序,排序結束,此時時間複雜度為o(n);
(2)每一輪」冒泡」結束後,最大的數將出現在亂序數列的最後一位。重複步驟(1)。
穩定性:穩定排序。
時間複雜度: o(n)至o(n2),平均時間複雜度為o(n2)。
最好的情況:如果待排序資料序列為正序,則一趟冒泡就可完成排序,排序碼的比較次數為n-1次,且沒有移動,時間複雜度為o(n)。
最壞的情況:如果待排序資料序列為逆序,則氣泡排序需要n-1次趟起泡,每趟進行n-i次排序碼的比較和移動,即比較和移動次數均達到最大值:
比較次數:cmax=∑i=1n−1(n−i)=n(n−1)/2=o(n2)
移動次數等於比較次數,因此最壞時間複雜度為o(n2)。
示例**:
void bubblesort(int array,int len)
}if(noswap) break;}}
二.簡單選擇排序原理:從所有記錄中選出最小的乙個資料元素與第乙個位置的記錄交換;然後在剩下的記錄當中再找最小的與第二個位置的記錄交換,迴圈到只剩下最後乙個資料元素為止。
穩定性:不穩定排序。
時間複雜度: 最壞、最好和平均複雜度均為o(n2),因此,簡單選擇排序也是常見排序演算法中效能最差的排序演算法。簡單選擇排序的比較次數與檔案的初始狀態沒有關係,在第i趟排序中選出最小排序碼的記錄,需要做n-i次比較,因此總的比較次數是:∑i=1n−1(n−i)=n(n−1)/2=o(n2)。
示例**:
void selectsort(int a,int len)
int left=low;
int right=high;
int key=a[left]; /*用陣列的第乙個記錄作為分割槽元素*/
while(left!=right)
if((j+inc)!=i)//防止自我插入
a[j+inc]=temp;//插入記錄}}
}
注意:從**中可以看出,增量每次變化取前一次增量的一般,當增量d等於1時,shell排序就退化成了直接插入排序了。
歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2-路歸併。
5.1 演算法描述
5.2 **演示
5.3 **實現
function mergesort(arr)
var
middle = math.floor(len / 2),
left = arr.slice(0, middle),
right = arr.slice(middle);
return
merge(mergesort(left), mergesort(right));
}
function merge(left, right)
else
}
while
(left.length)
result.push(left.shift());
while
(right.length)
result.push(right.shift());
return
result;
}
5.4 演算法分析
歸併排序是一種穩定的排序方法。和選擇排序一樣,歸併排序的效能不受輸入資料的影響,但表現比選擇排序好的多,因為始終都是o(nlogn)的時間複雜度。代價是需要額外的記憶體空間。
歡樂技術英雄會
在這個技術喧嘩的時代,網際網路就是江湖。江湖多凶險,但是很公平,只要有才能的人,就能成名,他們就是網際網路上的英雄 有的人天生就是英雄,無論他是否出生在亂世,在和平的年代他們是歡樂的英雄。夫網際網路英雄者,今朝胸懷技術泰斗,腹有安全良謀,有包藏天下軟體之機,吞吐萬難之志。2007技術英雄大會,他們將...
歡樂技術英雄會
在這個技術喧嘩的時代,網際網路就是江湖。江湖多凶險,但是很公平,只要有才能的人,就能成名,他們就是網際網路上的英雄 有的人天生就是英雄,無論他是否出生在亂世,在和平的年代他們是歡樂的英雄。夫網際網路英雄者,今朝胸懷技術泰斗,腹有安全良謀,有包藏天下軟體之機,吞吐萬難之志。2007技術英雄大會,他們將...
靈活運用的技術已實現
這些天webservice發展。理想情況下,資料傳輸自己的自定義類的陣列。時間的考驗前,串 hello,webservice 做測試,乙個非常成功的例子 後來,當複雜的資料型別的陣列。我的合作夥伴已接收的資料少。一直持續了大概乙個月,是在沒辦法,導師出馬了。建議我們把這些資料用xml檔案封裝起來。在...