排序演算法之選擇排序 選擇排序 堆排序

2021-08-28 11:01:18 字數 1592 閱讀 2171

【直接選擇排序】

**如下 ( 下面**是一次迴圈同時挑選出最大和最小數, 並將其與左右交換 ):

//選擇排序

void selectionsort(int *a, int len)

swap(&a[min], &a[left]);

//如果最大數的下標在為left,證明要交換的最大數已經被

//換到min小標所表示的位置,只需要將right和min位置交換即可

if (max == left)

swap(&a[min], &a[right]);

else

swap(&a[max], &a[right]);

left++, right--;

}}

建立堆:公升序—>大堆,降序—>小堆

執行如下步驟,直到陣列為空

把堆頂array[0]元素和當前最堆的最後乙個元素交換

堆元素個數減1

由於第1步後根節點不再滿足最堆定義,向下調整根結點

**如下 :

//向下調整

void adjustdown(int *a, int parent, int len)

}//堆排序

void heapsort(int *a, int len)

}

完整**如下 :

#include #include #include //交換資料

void swap(int *m, int *n)

//選擇排序

void selectionsort(int *a, int len)

swap(&a[min], &a[left]);

//如果最大數的下標在為left,證明要交換的最大數已經被

//換到min小標所表示的位置,只需要將right和min位置交換即可

if (max == left)

swap(&a[min], &a[right]);

else

swap(&a[max], &a[right]);

left++, right--; }}

//向下調整

void adjustdown(int *a, int parent, int len)

}//堆排序

void heapsort(int *a, int len)

}//列印陣列

void printarray(int *a, int len)

int main()

; selectionsort(a, sizeof(a) / sizeof(int));

//heapsort(a, sizeof(a) / sizeof(int));

printarray(a, sizeof(a) / sizeof(int));

system("pause");

return 0;

}

排序演算法 之選擇排序(直接選擇排序,堆排序)

一 排序演算法分為 1.插入排序 直接插入排序 希爾排序 2.選擇排序 直接選擇排序 堆排序 3.交換排序 氣泡排序 快速排序 4.歸併排序 二,選擇排序 直接選擇排序 1.演算法 選擇排序 直接選擇排序 void selectsort int a,size t n if a child a par...

排序演算法 排序演算法之選擇排序

最近在學習排序演算法,就排序演算法中的四大經典排序 氣泡排序 快速排序 選擇排序 插入排序。會出一系列的講解排序演算法的部落格。今天繼快速排序之後整理一下選擇排序。選擇排序,就是從一列未排序的陣列中先選出最小 最大 的數,放在陣列的第一位,第一位原來的數字放在最小的原來的位置,再選出第二小的數,放在...

排序演算法之選擇排序

選擇排序 在乙個長度為n的無序陣列中,在第一趟遍歷n個資料,找出其中最小的數值與第乙個元素交換,第二趟遍歷剩下的n 1個資料,找出其中最小的數值與第二個元素交換.第n 1趟遍歷剩下的2個資料,找出其中最小的數值與第n 1個元素交換,至此選擇排序完成。平均時間複雜度 o n2 空間複雜度 o 1 用於...