歸併排序的過程本身是線性的,但是需要線性的輔助空間。
c
#include #include #include using namespace std;
const int maxn =1000;
const int inf = 0x3f3f3f3f;
int a[maxn];
int t[maxn];
void merge_sort(int *a, int x, int y, int *t)
for(i = x; i < y; i++) a[i] = t[i];
}}int main()
; merge_sort(a, 0, 8, t);
for(int i = 0; i < 8; i++)
cout << endl;
return 0;
}
整體排序之後部分排序。此處並非隨機劃分。c
int cnt = 0;
void merge_sort(int *a, int x, int y, int *t)
}for(int i = x ;i < y ;i ++) a[i] = t[i];
}}
c
void quicksort(int *a, int l, int r)
a[i] = x;
quicksort(a, l, i-1);
quicksort(a, i+1, r);
}}
c
#include #include #include using namespace std;
const int maxn =1000;
const int inf = 0x3f3f3f3f;
int a[maxn];
int t[maxn];
int cnt = 0;
int k;
int quicksortfind(int *a, int l, int r)
a[i] = x;
if(l <= k && i-1 >= k)
return quicksortfind(a, l, i-1);
else if(i+1 <= k && k <= r)
return quicksortfind(a, i+1, r);
else
return x;
}return a[l];
}#define printarray(a, len) for(int i = 0 ;i < len; i++) cout << a[i] << " "; cout << endl;
int main()
; k = 4;
int temp = quicksortfind(a, 0, 7);
printarray(a, 8);
printf("%d\n", temp);
return 0;
}
不再直接返回,在stl函式中包含這個演算法c
int bsearch(int *a, int x, int y, int v)
// 沒找到
return -1;
}
c
int bsearch(int *a, int x, int y, int v)
// 沒找到
return x;
}
STL 排序與檢索
新增在標頭檔案algorithm中,使用方法如 sort start,end 排序方法 int a 5 sort a,a 5 這是最簡單的sort方法,使用預設的排序方法公升序排列 sort a,a 5,cmp cmp為bool函式名,是自定義規則比較函式 自定義的cmp函式 bool cmp in...
STL初步 排序與檢索
e.g.現有n個大理石,每個大理石上寫了乙個非負整數。首先把每個數從小到大排序,然後回答q個問題。每個問題問是否有乙個大理石寫著某個整數x。如果是,要回答在哪個大理石上寫著x。排序後的大理石從左到右編號為1 n。solution 先排序,後查詢 關於排序 sort使用陣列元素預設的大小比較運算子進行...
c 排序與檢索函式
問題描述 現有n個大理石,每個大理石上寫了乙個非負整數 首先把各數從小到大排序 然後回答q個問題。每個問題問是否有乙個大理石寫著某個整數x,如果是,還要回答哪個大理石上寫著x。排序後的大理石從左到右編號為1 n。輸入大理石數量和需要回答問題數量,然後輸入大理石上的每個非負整數,接著輸入x 樣例輸入 ...