`
lingyibin
  • 浏览: 193950 次
  • 性别: 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. 如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个...

Global site tag (gtag.js) - Google Analytics