一、簡單選擇排序
對於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 中選擇關鍵字...