筆記 C 陣列排序(選擇排序和插入排序

2021-10-04 04:26:43 字數 2440 閱讀 9217

選擇排序概念:將第0小的數移動到arr[0],將第1小的數移動到arr[1],一次類推通過迴圈完成排序。

因為可能會移動相同資料的位置,稱之為不穩定。

**理解:

假設乙個arr1[5]=;,需要將最小的數值先移動到arr1[0]的位置。需要定義乙個min值來儲存取得的最小值,min_index記錄min值所在的下標。

第一輪比較:

假設min=arr1[0]=4,同2比較,2<4,min=2;

min同1比較,1<2,min=1

min同3比較,3>1,min保持

min同5比較,5>1,min保持

int arr1[5]

=;int min = arr1[0]

;int min_index =0;

for(

int i=

1;i<

5;i++)}

arr1[min_index]

= arr1[0]

;arr1[0]

= min;

這是第一輪迴圈,下一輪的時候:1,2,4,3,5

設min=arr1[1];第三輪即min=arr1[2];只需要移動到arr1[3]的位置即停止。

外部再嵌入迴圈,如下**:

int arr1[5]

=;for(

int j =

0;j<

4;j++)}

arr1[min_index]

= arr1[j]

; arr1[j]

= min;

}

寫成函式,輸入陣列與陣列長度:void seclect_sort(int arr1,int n);

void

seclect_sort

(int arr1,

int n)

} arr1[min_index]

=arr1[j]

; arr1[j]

=min;

}}

插入排序的基本思想是,將元素逐個新增到已經排序好的陣列中去,同時要求,插入的元素必須在正確的位置,這樣原來排序好的陣列是仍然有序的。

在實際使用中,通常是排序整個無序陣列,所以把這個無序陣列分為兩部分排序好的子陣列和待插入的元素。第一輪時,將第乙個元素作為排序好的子陣列,插入第二個元素;第二輪,將前兩個元素作為排序好的陣列,插入第三個元素。以此類推,第i輪排序時,在前i個元素的子陣列中插入第i+1個元素。直到所有元素都加入排序好陣列。

以arr[4]=為例:

插入排序,先假設3是排序好的,即我們需要將arr[0]與arr[1]整合成乙個排序號的部分,也是將arr[1]在部分中插入。

3與2比較,3>2,將2插入到3前面。**實現:

int temp = arr[1]

;//要將arr[1]插入,先將arr[0]移動,在之前的筆記中有說到陣列插入。

for(

int k =

1;k >

0;k--

)arr[0]

= temp;

插入之後形成兩個部分,依次拿2與3同4比較,找4能插入的位置,出現兩個部分,繼續從arr[0]同arr[3]比較,插入。(對於初學者的我試著看著需求去寫**,但是仍然寫不出,看了**,剛開始也不是很懂為什麼插入要進行迴圈,直到想起前幾天學的,靜態陣列的插入,實際上是移動。)實現**如下:

#include

#pragma warning(disable:4966)

intmain()

;for

(int i =

1;i<

4;i++

)//當跳出迴圈,說明找到了插入的位置,即下標為j,

//所以需要向後移動一位,從j開始

int temp = arr[i]

;for

(int k=i;k>j;k--

) arr[j]

=temp;

}}

封裝成函式void insert_sort(int arr,int n);

void

insert_sort

(int arr,

int n)

int temp = arr[i]

;for

(int k=i;k>j;k--

) arr[j]

=temp;

}}

演算法筆記 選擇排序和插入排序

首先找到最小的元素,讓它和陣列的第乙個元素交換位置,然後在剩下的元素中找到最小的和陣列的第二個元素交換位置,如此往復,直到將整個陣列排好序。這裡規定陣列的長度為n public static void sort int a 交換a i 和a min int t a i a i a min a min...

陣列 氣泡排序 選擇排序 插入排序

package arr 我自己的陣列類 author guosheng public class arrayself public arrayself int chang 新增方法 郭勝 public void insert long value 降序插入 public void insertbys...

陣列排序 氣泡排序 插入排序 選擇排序

演算法思想 從頭開始依次比較兩個相鄰的元素 如果後面乙個比前面乙個大 說明順序不對,則將兩個交換,本次迴圈完成後從頭開始,直到沒有發生交換為止.給你乙個栗子 對5 2 3 1 4排序 首先 5 和 2 比較 5 2 將5 和 2 交換位置 之後的元素按照同樣的方法進行比較交換 第一次比較交換完成後 ...