選擇排序 簡單選擇排序 堆排序

2021-07-03 19:01:48 字數 1003 閱讀 8735

一、簡單選擇排序

對於n個數要進行n次排序,第一次,將最小的數放在第乙個。第二次,將第二小的樹,放在第二個。。。。

每次都和後面的數做比較,如果是從小到大的排序,當當前的數字比後面的大時,要進行交換。

#include void chosesort(int a,int length)

}}void main()

; int n = 8;

chosesort(a,n);

for(i =0;i

二、堆排序

堆是一棵完全二叉樹,其每個結點值都大於等於(小於等於)自己的左右孩子。

把乙個數量為n的陣列,構成堆,則其根結點為最大值(最小值),然後再對剩下的n-1個數構成堆,繼續取出其根結點。

要完成上述過程,需要完成兩個任務:

1、將一些數字構成堆

建堆方法:對初始序列建堆的過程,就是乙個反覆進行篩選的過程。

1)n 個結點的完全二叉樹,則最後乙個結點是第n/2個結點的子樹。

2)篩選從第n/2個結點為根的子樹開始,該子樹成為堆。

3)之後向前依次對各結點為根的子樹進行篩選,使之成為堆,直到根結點。

2、把根結點取出後,重新構建堆

把最後乙個和根結點交換。用建堆的方式(只需要對第乙個數進行建堆排序),再對前n-1個數進行建堆。

#include

/*
1、s為第s個需要調整的數,n為整個陣列的長度
主要將每個結點與孩子結點進行比較
*/

void headadjust(int a,int s,int n)

if(a[s]=0;i--)

for(j=length-1;j>=0;j--) }

void main()

; int n=10;

heap(a,n);

for(i = 0;i

選擇排序 簡單選擇排序和堆排序

1.簡單選擇排序 1 演算法思想 將序列的第乙個元素當作最小的元素,和後面的元素一一比較,將最小的元素下標標記出來,和第乙個元素進行交換,則一趟下來,第乙個元素一定是最小的,直到所有的元素全部排序完成。2 基本實現 void selectsort datatype arr,int sz if k i...

選擇排序 簡單選擇排序和堆排序

這裡的測試資料來自於之前自己隨便寫的生成器 include using namespace std intmain int t 10,arr 20 while t return0 簡單選擇排序 void selectsort int arr,int n if min i 簡單選擇排序 空間複雜度 使...

選擇排序(簡單選擇排序和堆排序)

選擇排序的基本思想 每一趟 例如第i趟 在後面n i 1 i 1,2,n 1 個待排序元素中選取關鍵字最小的元素,作為有序子串行的第i個元素,直到第n 1趟做完,待排序元素只剩下了1個,就不用再選了。1.簡單選擇排序 簡單排序演算法思想 假設排序表為l 1 n 第i趟排序即從l i n 中選擇關鍵字...