void InsertDirectly(int *L, int len){
int i, j, temp;
for (i = 1; i < len; ++i){
j = i;
temp = L[i];
while (j > 0 && temp < L[j-1]){
L[j] = L[j-1];
j--;
}
L[j] = temp;
}
}
void InsertInHalf(int *L, int len){
int i, j, mid;
int low = 0, high = 0, temp = 0;
for (i = 1; i < len; ++i){
low = 0;
high = i - 1;
temp = L[i];
while (low <= high){
mid = (low + high) / 2;
if (L[mid] > temp)
high = mid - 1;
else
low = mid + 1;
}
for (j = i; j > low; --j)
L[j] = L[j-1];
L[low] = temp;
}
}
void HillSort(int *L, int len){
for (int step = len / 2; step > 0; step /= 2) {
for (int i = step; i < len; ++i) {
for (int j = i - step; j >= 0; j -= step) {
if (L[j] > L[j + step]){
int temp = L[j];
L[j] = L[j + step];
L[j + step] = temp;
}
}
}
}
}
void BubbleSort(int *L, int len){
for (int i = 0; i < len - 1; ++i) {
for (int j = 0; j < len - i - 1; ++j) {
if (L[j] < L[j - 1]){
int temp = L[j];
L[j] = L[j + 1];
L[j + 1] = temp;
}
}
}
}
void QuickSorted(int *L, int left, int right){
if (left > right)
return;
int temp = L[left];
int i = left, j = right;
while (i < j){
while (i < j && temp <= L[j])
j--;
if (i < j)
L[i++] = L[j];
while (i < j && temp > L[i])
i++;
if (i < j)
L[j--] = L[i];
}
L[i] = temp;
QuickSorted(L, left, i - 1);
QuickSorted(L, i + 1, right);
}
void Swap(int *x, int *y){
int temp = *x;
*x = *y;
*y = temp;
}
void SelectSort(int *L, int len){
for (int i = 0; i < len - 1; ++i) {
int min = i;
for (int j = i + 1; j < len; ++j)
if (L[j] < L[min])
min = j;
Swap(&L[min], &L[i]);
}
}
void Swap(int *x, int *y){
int temp = *x;
*x = *y;
*y = temp;
}
void MaxHeap(int *L, int start, int end){
int dad = start;
int son = dad * 2 + 1;
while (son <= end){
if (son + 1 <= end && L[son] < L[son + 1])
son++;
if (L[dad] > L[son])
return;
else{
Swap(&L[dad], &L[son]);
dad = son;
son = dad * 2 + 1;
}
}
}
void HeapSort(int *L, int len){
int i;
for (i = len / 2 - 1; i >= 0; --i)
MaxHeap(L, i, len - 1);
for (i = len - 1; i > 0; --i){
Swap(&L[0], &L[i]);
MaxHeap(L, 0, i - 1);
}
}
int min(int x, int y){
return x < y ? x : y;
}
void MergeSort(int *L, int len){
int *a =L;
int *b = (int *)malloc(sizeof(int) * len);
int seg, start;
for (seg = 1; seg < len; seg += seg){
for (start = 0; start < len; start += seg * 2){
int low = start;
int mid = min(start + seg, len);
int high = min(start + seg * 2, len);
int k = low;
int start1 = low, end1 = mid;
int start2 = mid, end2 = high;
while (start1 < end1 && start2 < end2)
b[k++] = a[start1] < a[start2] ? a[start1++] : a[start2++];
while (start1 < end1)
b[k++] = a[start1++];
while (start2 < end2)
b[k++] = a[start2++];
}
int *temp = a;
a = b;
b = temp;
}
if (a != L){
int i;
for (i = 0; i < len; i++)
b[i] = a[i];
b = a;
}
free(b);
}
#define MaxSize 100
#define Base 10
void BaseSort(int *a, int len){
int i, b[MaxSize], m = a[0], exp = 1;
for (i = 1; i < len; i++) {
if (a[i] > m) {
m = a[i];
}
}
while (m / exp > 0) {
int bucket[Base] = { 0 };
for (i = 0; i < len; i++) {
bucket[(a[i] / exp) % Base]++;
}
for (i = 1; i < Base; i++) {
bucket[i] += bucket[i - 1];
}
for (i = len - 1; i >= 0; i--) {
b[--bucket[(a[i] / exp) % Base]] = a[i];
}
for (i = 0; i < len; i++) {
a[i] = b[i];
}
exp *= Base;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具