C语言-所有排序实现

C语言-所有排序实现,第1张

头文件Insert.h

#include
void Swap(int *a, int *b);
void StraightInsert(int *a, int n);
void HalfSearch(int *L, int n);
void BubbleSort(int *L, int n);
void SelectSort(int L[], int n);

测试文件Main.c

#include
#include"Insert.h"
int main() {
	int  L[8] = { 49,38,65,97,76,13,27,49 };//0为辅助空间初始化
	int n = 8;
	//StraightInsert(L, 8);//直接插入排序
	//HalfSearch(L, n);//折半查找
	BubbleSort(L, n);//冒泡排序
	//输出结果
	for (int i = 0; i < n; ++i) {
		printf("%d-->", L[i]);
	}
	printf("\n");
}


	

函数实现Insert.c

#include"Insert.h"
#include

void Swap(int *a, int *b) {
	int temp = *a;
	*a = *b;
	*b = temp;
}

void StraightInsert(int *L, int n) {
	for (int i = 1; i < n; i++) {
		if (L[i] < L[i - 1])//比较的是它以及它的邻居
		{
			Swap(&L[i], &L[i - 1]);//注意:这里传引用(因为是数组中的某一个值进行交换)
			for (int j = i - 1; j > 0 && L[j] < L[j - 1]; j--) //比较的是它和它之前的
				Swap(&L[j], &L[j - 1]);
		}//if
	}//for
}

void HalfSearch(int L[], int n) {
		int i, j, low, high, mid, key;
		for (i = 1; i < n; i++)
		{
			key = L[i];//把L[i]的值保存在key变量中
			low = 0;
			high = i - 1;
			while (low <= high)//折半查找
			{
				mid = (low + high) / 2;
				if (L[mid] >= key)
					high = mid - 1;//如果大于key值,则查找范围缩小到左子序列
				else
					low = mid + 1;//如果小于key值,则查找范围缩小到右子序列
			}
			for (j = i - 1; j >= high + 1; j--)
				L[j + 1] = L[j];//将high之后的数据整体后移
			L[high + 1] = key;//将key值插入该位置
		}
	}

void BubbleSort(int L[], int n) {
	int i, j;
	for (i = 0; i  L[j + 1])
				Swap(&L[j], &L[j + 1]);
		}
	}
}

void SelectSort(int L[], int n) {
	int i, j, k, temp;
	for (i = 0; i < n; i++)
	{
		k = i;//记录位置
		for (j = i + 1; j < n; j++)//查找后面的最小值
			if (L[k] > L[j])
				k = j;//记录位置
		if (k != i)//交换位置
			Swap(&L[i],&L[k]);
	}
}
	


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/788828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存