`
lingyibin
  • 浏览: 196320 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

插入排序的另一种写法

阅读更多

一般的插入排序方法想必大家都写过,基础好的几分钟就可以写出来了,基础差一点的调一调也就出来了。

下面是一般通用的插入排序算法:

#include<iostream>
using namespace std;
const int SIZE = 10;

int arrs[SIZE];

//打印排序后的数组
void printArr(){
	for(int i = 0; i < SIZE; i ++){
		cout<<arrs[i]<<(i==SIZE-1?"":" ");
	}
	cout<<endl;
}

//初始化数组
void initArr(){
	for(int i = 0; i < SIZE; i++){
		arrs[i] = rand()%50; //产生随机数
	}
	printArr();
}

//排序函数
void insertSort(){
	int temp,i,j;
	for(i = 1; i < SIZE; i ++){
		temp = arrs[i];
		j = i - 1;
		if(temp < arrs[j]){
			for(; temp < arrs[j]; j --){
				arrs[j+1] = arrs[j];
			}
			arrs[j+1] = temp;
		}
	}
}


int main()
{
	initArr();
	insertSort();
	printArr();
	return 0;
}

 

其实插入排序还有其它几种算法:二分插入排序 、双路径插入排序。虽然写法不同,但时间复杂度是一样的。

下面就讲 二分插入排序。思想很简单,就是在插入排序时应用二分法来把当前元素和已经排好序的比较。

#include<iostream>
using namespace std;

const int SIZE = 10;
int arr2[SIZE];

//初始化数组,数字随机产生
void initArr(){
	for(int i = 1; i <= SIZE; i ++){
		arr2[i] = rand()%50;
	}
}

//打印数组
void printArr(){
	for(int i = 1; i <= SIZE; i ++){
		cout<<arr2[i]<<(i == SIZE?"":" ");
	}
	cout<<endl;
}

//二分插入法
void bInsert(){
	int i,j,high,low,mid,temp;
	for(i = 2; i <= SIZE; i ++){
		temp = arr2[i];
		low = 1;
		high = i - 1;
		while(low <= high){
			mid = (low + high) / 2;
			if(temp > arr2[mid])
				low = mid + 1;
			else
				high = mid - 1;
		}//while

		for(j = i - 1; j >= high+1; --j)
			arr2[j+1] = arr2[j];
		arr2[j+1] = temp;
	} //for
}

int main()
{
	initArr();
	printArr();

	bInsert();
	printArr();
	return 0;
}
 
0
1
分享到:
评论

相关推荐

    快速排序的三种写法及随机化快速排序

    4. 当子数组的大小小于某个阈值(例如10)时,可以切换到插入排序,因为插入排序在小规模数据上表现更好。 文件名列表中的"快速排序1.txt"至"快速排序3.txt"可能包含了这三种快速排序方法的实现代码或详细解释。在...

    排序你学废了吗,茴香豆有四种写法,排序有十种写法

    希尔排序是插入排序的一种优化版本,它不是直接比较相邻元素,而是根据一个增量序列逐步减少增量,对每组元素进行插入排序,最后一组增量为1,相当于执行一次插入排序。这样可以更快地达到部分有序状态,从而提高...

    所有排序的写法(Java).zip

    7. **Shell排序**(ShellSort.java):Shell排序是插入排序的一种改进版,通过设定间隔序列,将元素分组进行插入排序,逐渐减小间隔直到间隔为1,完成排序。Shell排序的时间复杂度取决于所选的间隔序列,通常介于O(n...

    简单的快速排序

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),即把一个大问题分解成若干个小问题来解决,最终将小问题的结果合并得到原问题的解。在这...

    明基(BENQ)2012校园招聘笔试题之C++方向(试题+答案)

    - **适配器模式**:将一个类的接口转换成客户希望的另一个接口。 - **命令模式**:将请求封装为一个对象,从而使用户可用不同的请求对客户端进行参数化。 **6.2 工厂模式解释及示例** **6.2.1 解释** 工厂模式是...

    数据库和窗体

    另一种插入多行数据的方法是通过`INSERT SELECT`语句。这种方法允许我们将现有表中的数据添加到一个新表中。语法如下: ```sql INSERT INTO 新表名 (列名列表) SELECT (原列名列表) FROM 原表名; ``` 需要注意的是...

    2021-2022计算机二级等级考试试题及答案No.11145.docx

    19. 希尔排序:希尔排序是一种插入类排序法,通过比较距离较远的元素来改进插入排序的效率。 20. 命令按钮属性:在VB或类似的环境中,命令按钮上显示的文字内容是在Caption属性中设置的。 21. 中央处理器:中央...

    2018华科834复习八套卷 .pdf

    栈是一种后进先出(LIFO)的线性表,它允许在表的一端进行插入和删除操作,另一端则被封闭。 3. 表达式的后缀表达式 后缀表达式也称为逆波兰表示法,是一种没有括号且运算符后置的算术表达式写法。 4. 三对角矩阵...

    C语言程序设计标准教程

    另一种是按列排列, 即放完一列之后再顺次放入第二列。在C语言中,二维数组是按行排列的。 在图4.1中,按行顺次存放,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为...

    2021-2022计算机二级等级考试试题及答案No.3804.docx

    }` 是一种正确的写法,用于将文档主体的文本颜色设置为黑色。注意不要遗漏大括号或分号,这些都会导致CSS解析错误。 ### 7. Java Swing组件的使用 - **知识点**: Swing组件的使用。 - **详细解释**: Swing是Java...

    数据结构复习题

    11. 队列是一种操作受限的线性表,仅允许在一端插入,在另一端删除。 12. 栈和队列是线性表,但它们的操作受限,栈只能在表头进行插入和删除,队列则在两端操作。 13. 栈的定义明确指出,它是在表头进行插入(压栈...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

     Oracle 数据库中的SQL是当今市场上功能最强大的SQL实现之一,而本书全面展示了这一工具的威力。如何才能让更多人有效地学习和掌握SQL呢?Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习...

    2015创新工场校招研发笔试题

    - 比较排序是排序算法的一种,通过对元素进行比较来确定它们之间的大小顺序。 - **答案解析**: - 要找出数组中的最大和第二大元素,可以采用多种方法,最简单的方法是进行两轮遍历。 - 第一轮遍历找到最大值,...

    2021-2022计算机二级等级考试试题及答案No.19766.docx

    12. 希尔排序法:希尔排序是一种插入排序的变种,属于插入类排序法。 13. Java异常处理:JDK中的异常类大部分都是`Exception`类的子类,异常处理是Java程序设计中的重要组成部分。 14. 计算机网络的定义:计算机...

    2021-2022计算机二级等级考试试题及答案No.13293.docx

    - **知识点**: 冒泡排序是一种简单的交换排序算法。 - **解析**: 冒泡排序通过重复遍历待排序的序列,每次比较相邻的两个元素并将它们按升序或降序交换位置,最终使整个序列有序。 #### 12. 数据库操作命令 - **...

    结构化查询语言SQL习题与答案

    另一种是将SQL语句嵌入到其他高级语言(如Java、Python等)中执行。 3. **SQL的全部功能可以用9个动词概括,其中动词INSERT是属于下列** B)数据操纵 - **解析:** `INSERT`语句用于向表中插入新的记录,属于数据...

    数据结构考研复习资料(完整版)资料.doc

    断言是注释的一种特殊写法,它是一个逻辑谓词,陈述算法执行到此点时应满足的条件。 输入、输出和错误处理 输入、输出和错误处理是算法设计中的重要部分。输入可以通过专门的输入/出语句、参数表中的参数传递或...

    2021-2022计算机二级等级考试试题及答案No.10558.docx

    - **知识点解析**:在关系数据库中,一个关系(表)中的某列如果不是该关系的主键,但却是另一个关系的主键,则该列被称为外键。因此,正确答案是D. 如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个...

    SQL实现两张无关联表的数据列合并在一张结果集中

    - **使用子查询**:在最后一步中,通过子查询的方式从另一个表中获取数据是一种常见但非常灵活的方法。需要注意的是,这种方式可能会导致性能问题,特别是在大数据量的情况下。 - **临时表的使用**:创建临时表是...

Global site tag (gtag.js) - Google Analytics