IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言----常见的排序算法 -> 正文阅读

[数据结构与算法]C语言----常见的排序算法

?总结了一下C语言常见的排序算法,包括

1,选择排序

2,插入排序

3,希尔排序

4,归并排序

5,快速排序

6,冒泡排序

7,堆排序

#include <stdio.h>
#include <stdlib.h>
/*选择排序算法*/
void selectSort(int *a,int n)
{
	int i,j;
	int tmp;
	for(i=0; i<n-1; i++)
	{
		int min = i;
		for(j = i+1; j<n; j++)
		{
			if(a[j] < a[min])
				min = j;
		}
		if(min != i)
		{
			tmp = a[i];
			a[i] = a[min];
			a[min] = tmp;
		}
	}
}
/*插入排序*/
void insertSort(int *a, int n)
{
	int i,j,temp;
	for(i=1; i<n; i++)
	{
		temp = a[i];
		for(j=i-1; j>=0; j--)
		{
			if(a[j] > temp)
				a[j+1] = a[j];
			else
				break;
		}
		a[j+1] = temp;
	}
}
/*希尔排序*/
void shellSort(int *a, int n)
{
	int gap,i,j;
	int temp;
	for(gap=n/2;gap>0;gap/=2)
	{
		for(i=gap; i<n; i+=gap)
		{
			temp = a[i];
			for(j=i-gap;j>=0;j-=gap)
			{
				if(a[j] > temp)
					a[j+gap] = a[j];
				else
					break;
			}
			a[j+gap] = temp;
		}
	}
}
/*归并排序*/

void Merge(int *a, int low, int mid, int high)
{
	int *b = (int*)malloc(10*sizeof(int));
	int i,j,k=0;
	for(i=low;i<=high;i++)
		b[i] = a[i];
	for(i=low,j=mid+1,k=i;i<=mid && j<=high;k++)
	{
		if(b[i] <= b[j])
		{
			a[k] = b[i];
			i++;
		}
		else
		{
			a[k] = b[j];
			j++;
		}
	}
	while(i<=mid)
		a[k++] = b[i++];
	while(j<=high)
		a[k++] = b[j++];
	free(b);
}
void MergeSort(int *a, int low, int high)
{
	if(low<high)
	{
		int mid = (low+high)/2;
		MergeSort(a,low,mid);
		MergeSort(a,mid+1,high);
		Merge(a,low,mid,high);
	}

}
/*快速排序*/
int getIndex(int *a, int low, int high)
{
	int temp = a[low];
	while(low<high)
	{
		while(low<high && a[high] > temp)
			high--;
		a[low] = a[high];

		while(low<high && a[low] < temp)
			low++;
		a[high] = a[low]; 
	}
	a[low] = temp;
	return low;
}
void quickSort(int *a, int low, int high)
{
	if(low<high)
	{
		int index = getIndex(a,low,high);
		quickSort(a,low,index-1);
		quickSort(a,index+1,high);
	}
}
/*冒泡排序*/
void bubbleSort(int *a, int n)
{
	int i,j;
	for(i=0;i<n-1;i++)
	{
		for(j=0;j<n-i-1;j++)
		{
			if(a[j] > a[j+1])
			{
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}
}
/*堆排序*/
void adjustHeap(int *a, int s, int n)
{
	int rc = a[s];
	int j;
	for(j=2*s+1;j<n;j=2*j+1)
	{
		if(j+1<n && a[j] < a[j+1])
			j++;
		if(rc > a[j])
			break;
		a[s] = a[j];
		s = j;
	}
	a[s] = rc;
}
void heapSort(int *a, int n)
{
	int i,j;
	for(i=n/2-1;i>=0;i--)
	{
		adjustHeap(a,i,n);
	}
	for(i=n-1;i>0;i--)
	{
		int temp = a[0];
		a[0] = a[i];
		a[i] = temp;
		adjustHeap(a, 0, i);
	}
}
void print(int *a, int n)
{
	int i=0;
	for(i=0; i<n; i++)
		printf("%d ",a[i]);
	printf("\n");
}

int main()
{
	int a[] = {0,2,4,1,3,8,5,7,6,9};
	//selectSort(a,10);
	//insertSort(a,10);
	//shellSort(a,10);
	//MergeSort(a,0,9);
	//quickSort(a,0,9);
	//bubbleSort(a,10);
	heapSort(a,10);
	print(a,10);
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 12:27:46  更:2021-08-30 12:29:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:29:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码