/**
* 問題描述:編寫一個程式解決選擇問題。令k = N / 2。畫出表格顯示你的程式對於N為不同值時的執行時間。
*(設有一組 N 個數確定其中第 k 個最大者,稱選擇問題(selection problem))
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100000
/*宣告函式*/
int my_select(int arr[], int n, int k);
/*main 函式*/
int main(void)
{
int * arr;
int value;
// int N;
clock_t elapse;
// scanf("%d", &N);
srand((unsigned)time(NULL)); /*設定產生隨機數的種子*/
arr = (int *)malloc(sizeof(int) * N);
for (int j = 0; j < N; j++) {
arr[j] = rand() % 100000;
printf("%d ", arr[j]);
}
printf("\n");
// putchar("\n");
elapse = clock();
value = my_select(arr, N, N / 2);
elapse = clock() - elapse;
printf("Value: %d, elapsed: %.4lfs\n", value, (double)elapse / CLOCKS_PER_SEC);
free(arr);
// system("PAUSE");
return 0;
}
/* 選擇陣列中第k個最大者 */
int my_select( int arr[], int n, int k)
{
int * tmp;
int i, j, ret;
tmp = (int *)malloc(sizeof(int) * k); /*手動開闢記憶體空間*/
tmp[0] = arr[0];
/*讀入k個元素並降序排序*/
for (i = 1; i < k; i++) {
tmp[i] = arr[i];
for (j = i; j > 0; j--) { /* 氣泡排序 */
if (arr[i] > tmp[j-1]) {
tmp[j] = tmp[j-1];
tmp[j-1] = arr[i];
}
}
}
/*讀入arr[k,...]元素*/
for (i = k; i < n; i++) {
if (arr[i] > tmp[k-1]) {
tmp[k-1] = arr[i];
for (j = k-1; j > 0; j--) {
if (arr[i] > tmp[j-1]) {
tmp[j] = tmp[j-1];
tmp[j-1] = arr[i];
}
}
}
}
ret = tmp[k-1];
free(tmp);
return ret;
}
資料結構與演算法分析(c 語言描述)習題 1.1
相關文章
- 資料結構與演算法分析(c 語言描述)習題 1.2資料結構演算法
- 資料結構與演算法分析(c 語言描述)習題 1.3資料結構演算法
- 樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- AVL 樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 伸展樹 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 棧 ADT 【資料結構與演算法分析 c 語言描述】資料結構演算法
- 資料結構與演算法分析(c 語言描述)最大子序列和問題資料結構演算法
- 佇列 ADT 【資料結構與演算法分析 c 語言描述】佇列資料結構演算法
- 棧的應用之平衡符號 【資料結構與演算法分析 c 語言描述】符號資料結構演算法
- 資料結構與演算法分析(c 語言描述)基數排序 陣列實現資料結構演算法排序陣列
- 基數排序-單連結串列實現【資料結構與演算法分析(c 語言描述)】排序資料結構演算法
- 資料結構與演算法分析(java語言描述) 部分課後習題答案 第一章資料結構演算法Java
- 雜湊表 ADT 分離連結法【資料結構與演算法分析 c 語言描述】資料結構演算法
- 資料結構與演算法分析(c 語言描述)多項式 ADT 陣列實現資料結構演算法陣列
- 資料結構與演算法分析(c 語言描述)多項式 ADT 單連結串列實現資料結構演算法
- 《資料結構與演算法分析-C語言描述》第三章 表、棧和佇列 學習筆記資料結構演算法C語言佇列筆記
- 二叉樹 & 二叉查詢樹 ADT【資料結構與演算法分析 c 語言描述】二叉樹資料結構演算法
- 二叉樹 & 二叉查詢樹 ADT [資料結構與演算法分析 c 語言描述]二叉樹資料結構演算法
- 雜湊表 ADT 開放地址法解決衝突【資料結構與演算法分析 c 語言描述】資料結構演算法
- 資料結構演算法與應用c++語言描述 原書第二版 答案(更新中資料結構演算法C++
- 在資料結構與演算法中 傳值方式(C語言)資料結構演算法C語言
- 重學C語言_資料結構與基礎語法C語言資料結構
- 資料結構--排序--插入排序--python語言描述資料結構排序Python
- C語言版資料結構及演算法_快速排序C語言資料結構演算法排序
- 《資料結構與演算法JavaScript描述》選讀:為什麼要學習資料結構和演算法資料結構演算法JavaScript
- C語言結構體大小分析C語言結構體
- 讀後感:資料結構與演算法JavaScript描述資料結構演算法JavaScript
- 資料結構雜湊表(c語言)資料結構C語言
- 資料結構 順序棧(c語言)資料結構C語言
- C語言結構體專題C語言結構體
- 資料結構:初識(資料結構、演算法與演算法分析)資料結構演算法
- C語言_資料結構和演算法之_排序和查詢C語言資料結構演算法排序
- c語言資料結構補齊原則C語言資料結構
- 資料結構C語言|佇列相關資料結構C語言佇列
- 資料結構與演算法學習-複雜度分析資料結構演算法複雜度
- 資料結構與演算法分析——棧資料結構演算法
- C語言學習筆記:結構體與指標C語言筆記結構體指標
- 資料分析與挖掘 - R語言:KNN演算法R語言KNN演算法