基於交換排序演算法有兩種:氣泡排序和快速排序
示例陣列:int keys = new int;
比較相鄰兩個元素,大的往後排。最簡單的乙個排序方法了。
public
static
void
bubblesort(int a) }}
}
以上面的示例陣列32,26,87,72,26,17為例,我們發現,當我們第一次 把87下沉的時候87和72交換一次,其中有一次到達了temp位置,87和26又交換一次,到達temp位置,87又和17交換了一次,到達了temp位置,到達又離開,存在重複的資料移動,為了盡可能的避免這種事情的發生於是出現了快速排序。演算法描述:
選取序列的第乙個元素keys[i]38作為基準值vot,空出keys[i]的值
在序列後端尋找乙個小於基準值的元素,交換到序列前端。即比較keys[j]元素26與基準值的大小。若小則將keys[j]元素26移動到keys[i]位置,i++,此時keys[j]位置空出
在序列前端尋找大於基準值的元素,交換到序列後端。再比較keys[i]元素97與基準值,若大則將keys[i]元素97移動到序列後端的keys[j]位置,j–,keys[i]位置空出。不移動與基準值相等的元素
重複執行2,3步驟。直到i==j,表示序列中的每乙個元素都與基準值比較過了。並且已經將小於基準值的元素移動到前端,將大於基準值的元素移動到了後端。當前i(j)的位置則是基準值的最終位置。
一趟快速排序將資料序列劃分為兩個子串行,範圍分別為begin~j-1,i+1~end。每個子串行較短,再對兩個子串行分別進行快速排序,直到子串行長度為1。
看下面的圖,圖選的是最後乙個為基準。
if (ikeys[i++] = keys[j];//子串行後端較小元素向前移動,等同於keys[i] = keys[j];i++;
}while (ikeys[i]<=vot)
if (ikeys[j--] = keys[i];//子串行前端較大值向後移動}}
keys[i] = vot;//基準值到達最終位置
quicksort(keys,begin,j-1);
quicksort(keys,i+1,end);
}
}空間複雜度
當n較大而且資料序列隨機排列的時候,快速排序是快速的,當n很小或者基準值軒卻不合適的時候,快速排序則較慢
快速排序是不穩定排序
排序 交換排序
交換排序 利用交換位置進行排序 1 演算法思想 重複的走訪要排序的元素,依次比較相鄰兩個元素的大小,如果順序錯誤則交換這兩個元素的位置,直到不需要在比較 2 步驟 比較相鄰兩個元素,如果前乙個比後乙個大,則交換位置 從第乙個元素一直比較到最後乙個元素,這時最後乙個元素的值是最大的 減掉最後乙個元素,...
線性表的查詢和交換
題目源自王道資料結構 如果找到要查詢的元素,將要查詢的元素前移一位 在順序表和單鏈表中實現 說明 在順序表中,通過折半查詢進行查詢,找到待查詢元素之後交換位置 在單鏈表中,通過兩種方法進行交換,一種是結點不變,交換結點的值,函式類似於順序表 另一種是交換結點 問題 使用鏈式結構的順序結構,在初始化的...
交換排序演算法
快速排序 為啥叫快速排序,因為速度快,效率高 1.先找乙個數作為基準。作為基準的這個數,一趟排下來,左邊的數必小於它,右邊的數必大於它,也就是說,它找到了自己的位置。2.將兩個指標i,j分別指向表的起始 基準 和最後的位置。3.比較j指標的數字是否小於基準,j 直到j小於基準,交換位置 4.比較i指...