基礎排序演算法(1)

2022-09-06 23:54:21 字數 2508 閱讀 9153

1、倆倆比較,大的放在後面,第一次排序後最大值已在陣列末尾。

2、因為需要倆倆比較,需要n-1趟排序,比如10個數,需要9趟排序

3、兩個for迴圈,外層迴圈控制排序的趟數,內層迴圈控制比較的次數,每趟過後,比較的次數都應該要減1

4、如果一趟排序後沒有發生位置交換,說明已經有序,不需要繼續迴圈了

/**

* 氣泡排序

* *@author kaifeng

*/public

class

bubblesort ;

//是否排好序,預設值-1,正在排序

int ischange = -1;

//外層迴圈是排序的趟數

for (int i = 0; i < arrays.length - 1; i++)

}//如果比較完一趟沒有發生置換,那麼說明已經排好序了,不需要再執行下去了

if (ischange == 0)

}system.out.println("氣泡排序結果:" + arrays.tostring(arrays));

}}

找到陣列中最大的元素,與陣列最後一位元素交換,

當只有乙個數時,則不需要選擇了,因此需要n-1趟排序,比如10個數,需要9趟排序

兩個for迴圈,外層迴圈控制排序的趟數,內層迴圈找到當前趟數的最大值,隨後與當前趟陣列最後的一位元素交換

/**

* 選擇排序

* *@author kaifeng

*/public

class

selectsort ;

int pos = 0;

//外層迴圈控制需要排序的趟數

for (int i = 0; i < arrays.length - 1; i++)

}//交換

temp = arrays[pos];

arrays[pos] = arrays[arrays.length - 1 - i];

arrays[arrays.length - 1 - i] = temp;

}system.out.println("選擇排序結果:" + arrays.tostring(arrays));

}}

將乙個元素插入到已有序的陣列中,在初始時未知是否存在有序的資料,因此將元素第乙個元素看成是有序的

與有序的陣列進行比較,比它大則直接放入,比它小則移動陣列元素的位置,找到個合適的位置插入

當只有乙個數時,則不需要插入了,因此需要n-1趟排序,比如10個數,需要9趟排序

乙個for迴圈內嵌乙個while迴圈實現,外層for迴圈控制需要排序的趟數,while迴圈找到合適的插入位置(並且插入的位置不能小於0)

/**

*@author kaifeng

*/public

class

insertsort ;

//臨時變數

int temp;

//外層迴圈控制需要排序的趟數,下標從1開始

for (int i = 1; i < arrays.length; i++)

//退出了迴圈說明找到了合適的位置了,將當前資料插入合適的位置中

arrays[j + 1] = temp;

}system.out.println("選擇排序結果:" + arrays.tostring(arrays));

}}

在陣列中找乙個元素,比它小的放在節點的左邊,比它大的放在節點右邊。一趟下來,比節點小的在左邊,比節點大的在右邊。

/**

* 快速排序,使用遞迴實現

* *@author kaifeng

*/public

class

quicksort ;

quicksort(arrays, 0, arrays.length - 1);

system.out.println(arrays.tostring(arrays));

}/**

* 快速排序

**@param arr 待排序陣列

*@param first 指向陣列第乙個元素

*@param end 指向陣列最後乙個元素

*/public

static

void

quicksort(int arr, int first, int end)

//尋找直到比中間點小的數

while (pivot < arr[j])

//此時已經分別找到了比中間點的數(右邊)、比中間點的數(左邊),它們進行交換

if (i <= j)

}//上面乙個while保證了第一趟排序中間點的左邊比中間點小,中間點的右邊比中間點大了。

//「左邊」再做排序,直到左邊剩下乙個數(遞迴出口)

if (first < j)

//「右邊」再做排序,直到右邊剩下乙個數(遞迴出口)

if (i < end)

}}

演算法基礎(1) 氣泡排序

使用c 編寫氣泡排序類,成員函式bubblesort 對雙精度型內建陣列進行氣泡排序,標頭檔案為mysort.h,實現檔案為mysort.cpp,vec和length分別為陣列的首位址和陣列長度 下面展示mysort.h 與 mysort.cpp。ifndef my sort define my s...

演算法基礎1 插入排序

一 插入排序 在許多經典的書籍中,插入排序的演算法涉及到兩張牌 1 遞迴牌 2 當前牌。具體的視覺化的步驟如下圖 上圖即為插入排序基本的實現過程。1 key與遍歷集合中的每乙個元素進行比較。key a j i j 1 往左遍歷 2 尋找插入的位置 while i 0 and a i key a i ...

演算法導論學習筆記 1 基礎排序演算法

最近從頭開始學習演算法導論,作為乙個非計算機專業的學生,我的目的也就是為了找工作的時候能多點籌碼 但是學習過程中還是有不少收穫的,順便也能練習下python程式設計水平,因此記錄下學習內容 第一章是演算法基礎,這裡介紹了2種排序方法 插入排序和歸併排序 例子還算比較淺顯易懂。對於插入排序,可以用乙個...