話不多說,小知識先走一波
如何不使用額外變數完成陣列不同位置值的交換?
**:
/**
* 不使用第三個變數,交換陣列不同的數值
* @param arr
* @param x
* @param y
*/public
static
void
swap
(int arr,
int x,
int y)
注:在陣列這樣做有些地方會出現bug,比如快排中,陣列0位置和其自身交換會變成0
/**
* 選擇排序
* 基本思想:為每一趟從待排序的資料元素中選擇最小(或最大)的乙個元素作為首元素(交換位置),
* 直到所有元素排完為止,簡單選擇排序是不穩定排序
* @param arr
*/public
static
void
selectsort
(int arr)
min = arr[i]
;//不可缺少,arr[i]值改變了,不代表min改變}}
}/**
* 改進:在演算法實現時,每一趟確定最小元素的時候會通過不斷地比較交換來使得首位置為當前最小,
* 交換是個比較耗時的操作,在還未完全確定當前最小元素之前,這些交換都是無意義的。
* 通過設定乙個變數min,每一次比較僅儲存較小元素的陣列下標,
* 當輪迴圈結束之後,那這個變數儲存的就是當前最小元素的下標,此時再執行交換操作即可
* @param arr
*/public
static
void
selectsortimprove
(int arr)
}//不相等表明陣列後面有數比第乙個位置值小
if(i != min)
}}
/**
* 氣泡排序
* 穩定排序
* @param arr
*/public
static
void
bubblesort
(int arr)
}}}/**
* 氣泡排序改進版
* 在外層迴圈過程中,某次迴圈沒有交換元素,證明後續元素有序
* @param arr
*/public
static
void
bubblesortimprove
(int arr)
}if(flag)
}}
/**
* 直接插入排序
* 從第乙個元素開始,每次保證n個元素有序,否則交換
* 在乙個有序集合中,找到要插入元素的位置,將該元素放在陣列末尾,與前面相鄰元素比較,即可找到合適位置
* @param arr
*/public
static
void
insertsort
(int arr)
}}
三大基礎排序思路很簡單,但是能否在極短時間內寫出正確**呢?
同時他們的時間複雜度都是o(n^2)
冒泡 插入 選擇排序及其改進
這三種排序方式可以說是最簡單,最常用的三種排序方式了。值得說的是,在每種排序之後我都附加了其改進版本。普通氣泡排序 void bubble sort int array,int size 改進一 氣泡排序中如果這一趟裡面沒有交換任何元素,說明陣列中每個元素都一排好序。就不用再繼續比較了。void b...
基本排序(氣泡排序,選擇排序,插入排序)
1.氣泡排序 演算法介紹 氣泡排序,是指計算機的一種排序方法,它的時間複雜度為o n 2 雖然不及堆排序 快速排序的o nlogn,底數為2 但是有兩個優點 1.編 程複雜度 很低,很容易寫出 2.具有穩定性,這裡的穩定性是指原序列中相同元素的相對順序仍然保持到排序後的序列,而堆排序 快速排序均不具...
氣泡排序及其優化
然則 2015年12月30日發布 氣泡排序是比較簡單的,其排序步驟就是比較相鄰元素並將較大的往後移。每掃瞄一輪,將確定乙個元素的位置。實現如下 void sort int a 對氣泡排序的優化主要是減少交換次數。如果一次掃瞄中元素沒有發生交換,那麼排序就可以結束了。為此可設定一標誌量flag,預設為...