演算法原理:
1.比較相鄰的元素。 如果第乙個比第二個大,就交換他們兩個。**實現:2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。 在這一點,最後的元素應該會是最大的數。
3. 針對所有的元素重複以上的步驟,除了最後乙個。
4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
public
int bubblesort(int array)}}
return
array;
}
上面**是沒有經過優化的**,如果我們想進行優化,那該怎麼優化呢?因為上面的**每次都會去比較前乙個值和後乙個值的大小,當我們發現在比較的過程中有一組值沒有交換,則說明該元素之後的元素都是有序的,所以該元素之後的比較次數其實是多餘,因此,我們增加乙個bool變數標識在比較的過程中,是否有元素進行了交換,**如下。
改良後的氣泡排序**實現:
public
int bubblesortpro(int array)}}
return
array;
}
時間複雜度
o(n2)
演算法原理:
1.在長度為n的無序陣列中,第一次遍歷n-1個數,找到最小的數值與第乙個元素交換;與氣泡排序的區別:2.第二次遍歷n-2個數,找到最小的數值與第二個元素交換;
3. 第n-1次遍歷,找到最小的數值與第n-1個元素交換,排序完成。
與氣泡排序不同的是選擇排序不是每次發現資料小的時候就會交換位置,而是將位置的下標記錄下來,比較完一輪後,再去交換位置。**實現:
public
static
int selectionsort(int array)
}if (min != i)
}return
array;
}
時間複雜度
o(n2)
演算法原理:
1.從第乙個元素開始,該元素可以認為已經被排序;**實現:2.取出下乙個元素,在已經排序的元素序列中從後向前掃瞄;
3.如果該元素(已排序)大於新元素,將該元素移到下一位置;
4.重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;
5.將新元素插入到該位置後;
6.重複步驟2~5。
public
static
int insertionsort(int array) else }}
return
array;
}
常用排序演算法的C語言實現
最近看資料結構,把常用的排序演算法用c語言寫了一下。沒有按資料結構上的定義sqlist結構體,只是用陣列的形式實現。有的演算法並沒有完全按書上給出的演算法,但思路一致。includevoid insertsort int,int 直接插入排序 無哨兵 void binsertsort int,int...
快速排序(java 語言實現)
package com.shan.quicksort 快速排序是由c.a.r.hoare 開發的,該演算法在陣列中選擇乙個稱為主元 pviot 的元素將陣列分為兩部分,是的第一部分的元素全部小於或等於主元,而第二部分的元素全部大於主元。對第一部分遞迴地使用快速排序,對第二部分遞迴地使用快速排序。au...
幾種常用排序演算法的C語言實現
重溫資料結構,順手寫下幾種常用的排序演算法,以備查詢。cpp view plain copy print?include include include include include include void print int a,int n printf n return 直接插入排序,時間複...