選擇排序之簡單選擇排序與堆排序C C

2021-07-28 07:04:21 字數 2008 閱讀 9572

一、簡單選擇排序

簡單選擇排序即每次選出最小或最大的元素與當前長度陣列的最末尾進行交換,進行n-1次交換即可得到有序序列。

1、平均時間複雜度為o(n^2)

2、最好與最壞時間複雜度都為o(n^2)

3、空間複雜度為o(1)

**實現

/*

*進行簡單的選擇排序

*/#include

#define maxsize 100

/* *進行選擇排序

*/void selectsort(int a , int

length) ;

/* *進行陣列元素的交換

*/void swap(int

*a , int

*b) ;

/* *進行陣列的顯示

*/void displayarray(int a , int

length) ;

void main()

printf("before sort... \n") ;

displayarray(a , length) ;

selectsort(a , length) ;

printf("after sort... \n") ;

displayarray(a , length) ;

}void selectsort(int a , int

length)

}if(k != i)

}}void swap(int

*a , int

*b)void displayarray(int a , int

length)

printf("\n") ;

}

二、堆排序

堆排序即根據陣列所在下標建立完全二叉樹,根節點的節點值要大於他的孩子節點,每次取出樹的根節點與當前陣列的最末位進行交換,並重建堆,最終即可得到有序陣列。

1、平均時間複雜度與最好最壞時間複雜度都是o(nlogn)

2、空間複雜度為o(1)

陣列0位不儲存元素

**實現

/*

*進行陣列的對排序

*/#include

#define maxsize 100

/* *重建堆的過程

*/void sift(int a , int k , int

m) ;

/* *建初堆

*/void crt_heap(int a , int

length) ;

/* *堆排序過程

*/void heapsort(int a , int

length) ;

/* *進行元素的交換

*/void swap(int

*a , int

*b) ;

/* *進行陣列的顯示

*/void displayarray(int a , int

length) ;

void main()

printf("before sort... \n") ;

displayarray(a , length) ;

heapsort(a , length) ;

printf("after sort... \n") ;

displayarray(a , length) ;

}void sift(int a , int k , int

m) if(a[k] > a[i])

else

}a[k] = temp ;

}void crt_heap(int a , int

length)

}void heapsort(int a , int

length)

}void swap(int

*a , int

*b)void displayarray(int a , int

length)

printf("\n") ;

}

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

一 簡單選擇排序 對於n個數要進行n次排序,第一次,將最小的數放在第乙個。第二次,將第二小的樹,放在第二個。每次都和後面的數做比較,如果是從小到大的排序,當當前的數字比後面的大時,要進行交換。include void chosesort int a,int length void main int ...

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

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 簡單選擇排序 空間複雜度 使...