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语言实现八种排序(1) -> 正文阅读

[数据结构与算法]C语言实现八种排序(1)

1. 插入排序

什么是插入排序?

插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

1.1 简单插入排序

代码实现如下:


void InsertSort(int*a,int length){
	int i,j;
	for(i=1;i<length;i++){ //从1开始是因为下标为0之前没有元素 
		if(a[i]<a[i-1]){
		int key=a[i];
		j=i-1;
		while(j>=0&&key<a[j]){  //直到找到大于a[j]的数 或者j=-1,插入在第一个位置 
			a[j+1]=a[j];
			j--;
		}
	 a[j+1]=key;	
	}
  }
}
int main(){
	int a[]={1,2,7,4,5,9,6};
	int length=sizeof(a)/sizeof(a[0]);
	InsertSort(a,length);
	for(int i=0;i<length;i++){//打印
		printf("%d ",a[i]);
	}
	return 0;
} 

但我们认为这种插入的方法仍有改进的可能,所以我们创建了一种新的插入方法? -- 折半插入

注意:我们这里实现的都是从小到大排序!

代码实现如下:

void InsertSort(int*a,int length){
	int i,j,left,right;
	for(i=1;i<length;i++){ //从1开始是因为下标为0之前没有元素 
		int key=a[i];
		left=0;
		right=i-1;
		while(left<=right){
		 int mid = (left+right)/2;
			if(a[mid]>key){   
				right=mid-1;
			}else{
				left=mid+1;
			}
		}
		for(j=i-1;j>=right+1;j--){
			a[j+1]=a[j];
		}
	  a[right+1]=key;	
	
  }
}

1.2 希尔排序

希尔排序也是一种插入排序,我们发现在排序前越接近基本有序,插入排序的效率就越高,为了提高我们的效率,我们可以进行多次跨越排序,尽可能的使得我们的排序速率更快。

实现代码如下:

void ShellSort(int*a,int d,int length){
	int i,j;
	for(;d>=0;d-=2){//逐渐减少步幅,直到为1就成为了普通插入排序
		for(i=d;i<length;i++){
			if(a[i]<a[i-d]){
				int key=a[i];
				for(j=i-d;j>=0&&key<a[j];j-=d){
					a[j+d]=a[j];
				}
				a[j+d]=key;
			}
		}
	} 
}
int main(){
	int a[]={1,2,7,4,5,9,6};
	int length=sizeof(a)/sizeof(a[0]);
	ShellSort(a,5,length); 
	for(int i=0;i<length;i++){
		printf("%d ",a[i]);
	}
	return 0;
} 

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:24:47  更:2022-04-15 00:28:33 
 
开发: 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/26 7:32:03-

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