常用排序算法的C语言实现

最近看数据结构,把常用的排序算法用C语言写了一下。

没有按数据结构上的定义SqList结构体,只是用数组的形式实现

有的算法并没有完全按书上给出的算法,但思路一致。

#include
void InsertSort(int[], int);	//直接插入排序 无哨兵
void BInsertSort(int[], int);	//折半插入排序
void BubbleSort(int[], int);	//起泡排序
void QSort(int[], int, int);	//快速排序
void SelectSort(int[], int);	//简单选择排序

int main(){
	//int num[] = {12,23,21,23,123,21,2,221,12,44};
	int num[] = {4,3,6,7,2,13,21,9,8,34};
	//int num[] = {38,65,97,76,13,27,49};  //快排使用
	int i;
	int len = 10;

	//InsertSort(num, len);
	//BInsertSort(num, len);
	//BubbleSort(num, len);	
	//len = 7;
	//QSort(num, 0, len-1);
	//SelectSort(num, len);

	for(i=0; i0; j--)
		{
			if(temp < num[j-1]){
				num[j] = num[j-1];
			}else{
				break;
			}
		}
		num[j] = temp;
	}
}

//折半插入排序
void BInsertSort(int num[], int len){
	int i,j,temp,low,high,mid;
	for(i=1; i= num[i-1]) continue;
		temp = num[i];
		low = 0;
		high = i-1;
		mid = (low + high)/2;
		while(low <= high)
		{
			if(num[mid] > temp){
				high = mid - 1;
			}else
			{
				low = mid + 1;
			}
			mid = (low + high)/2;
		}
		//二分查找完成后,low会指向应插入的位置
		for(j=i; j>=low; j--)
		{
			num[j] = num[j-1];
		}
		num[low] = temp;
	}
}

//起泡排序
void BubbleSort(int num[], int len){
	int i, j, temp;
	int change = 1;
	for(i=len; i>0; i--)
	{
		if(change == 0) break;
		change = 0;
		for(j=1; j num[j]){
				temp = num[j-1];
				num[j-1] = num[j];
				num[j] = temp;
				change = 1;
			}
		}
	}
}

//快速排序
int Partition(int num[], int low, int high)
{	//一趟快排,返回枢轴位置
	int temp = num[low];
	while(low < high)
	{
		while(low= temp) --high;
		num[low] = num[high];
		while(low[minValueTag]; 
void SelectSort(int num[], int len){
	int i, j, minValueTag, temp;
	for(i=0; i
仅供参考,因个人水平及时间有限,文章的错误和不足之处还望指正


参考文献:

        《数据结构(C语言版)》  严蔚敏 吴伟民 著  清华大学出版社

你可能感兴趣的:(常用排序算法的C语言实现)