直接選擇排序
(不穩定)
排序過程:
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.時間複...