選擇排序(直接選擇 堆排序)

2021-06-18 07:16:45 字數 1369 閱讀 3411

直接選擇排序

(不穩定)                       

排序過程:

1 、首先在所有資料中經過n-1次比較選出最小的數,把它與第1個資料交換,

2、然後在其餘的資料內選出排序碼最小的數,與第2個資料交換...... 依次類推,直到所有資料排完為止。

在第i 趟排序中選出最小關鍵字的資料,需要做n-i次比較。

複雜度:

總的比較次數為

n(n-1)/2=o(n2)。

當初始檔案為正序時,移動次數為

0;檔案初態為反序時,每趟排序均要執行交換操作,總的移動次數取最大值

3(n-1)。

直接選擇排序的平均時間複雜度為

o(n2),

直接選擇排序是不穩定的。

與氣泡排序的區別:

1、選擇排序

:a[0]

與a[1] 

比較,如果

a[0]

大於a[1], 

記錄最小數

a[1]

的位置1

,然後j++

,變成了

a[2]

與當前最小的數

a[1]

比較,慢慢往後迴圈,記錄最小的數,最好將最小的數與第乙個數

a[0]

交換位置 2

、氣泡排序:首先第乙個數

a[0]

與第二個數

a[1] 

比較(從小到大),然後第二個數

a[1]

與第三個數

a[2] 比較;

第三個數

a[2]

與第四個數

a[3]...... 

第一內層迴圈結束;

程式如下:

void selectsort(int *arr,int num)

if(rchild<=size&&a[rchild]>a[max])  

if(max!=i)  

}          

}  void buildheap(int *a,int size)    //建立堆   

}   

void heapsort(int *a,int size)    //堆排序   

}   

int main(int argc, char *argv)  

;  int a[100];  

int size;  

while(scanf("%d",&size)==1&&size>0)  

return 0;  }

選擇排序 直接選擇排序,堆排序

選擇排序 selection sort 是一種簡單直觀的 排序演算法 它的工作原理是每一次從待排序的 資料元素 中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法 1.簡單的選擇排序 基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位...

選擇排序 直接選擇排序 堆排序

1.基本思想 每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完 在元素集合array i array n 1 中選擇關鍵碼最大 小 的資料元素 若它不是這組元素中的最後乙個 第乙個 元素,則將它與這組元素中的最後乙個 第乙個 元素交換 在剩餘...

選擇排序(直接選擇排序 堆排序)

選擇排序的基本方法 每次都從待排序物件中選出排序碼最大或最小的物件,依次排列,一共進行n 1次即可將n個物件排序完成。選擇排序的實施方案 1.直接選擇排序 2.堆排序 一 直接選擇排序 1.演算法 直接選擇排序 func selectsort data int if minindex i 2.時間複...