博客
关于我
排序(插入排序、起泡排序、选择排序和快速排序)
阅读量:563 次
发布时间:2019-03-09

本文共 1790 字,大约阅读时间需要 5 分钟。

排序

一、插入排序

算法思想:逐步将记录插入到已排好序的有序表中。

(一)直接插入排序(Straight Insertion Sort)

//直接插入排序void InsertSort(int a[], int n){   	int i,j;	int t; //交换中间变量 	//从第二个开始插入	for(i = 2; i<=n; i++) //控制循环多少趟 	{   		if(a[i-1]>a[i])		{   			a[0] = a[i];			for(j = i-1; a[j] > a[0]; j--)				a[j+1] = a[j]; //大于a[0]的记录往后移 			a[j+1] = a[0];		}	}}

(二)折半插入排序(Binary Insertion Sort)

//折半插入排序 void BInsertSort(int a[], int n){   	int i,j;	int t;	int low, high, mid;	for(i = 2; i<=n; i++) //控制循环的趟数,每一趟采用折半查找 	{   		a[0] = a[i];		low = 1; 		high = i-1;		while(low <= high)		{   			mid = (low + high)/2;			if(a[mid] >= a[0])				high = mid - 1;			else				low = mid + 1;		}		for(j = i-1; j >= high+1; j--) //查找之后进行记录后移 			a[j+1] = a[j];		a[high+1] = a[0];	}}

二、起泡排序(Bubble Sort)

算法思想:从前向后依次检查每一对相邻元素,一旦发现逆序即交换二者的位置。对于长度为n的序列,共需做n - 1次比较和不超过n - 1次交换,这一过程称作一趟扫描交换。每一趟扫描都至少会有一个元素就位。

//起泡排序void BubSort(int a[], int n){   	int i, j, t;	for(i = 1; i
a[j+1]) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } }}

三、快速排序(Quick Sort)

算法思想: 通过一趟排序将第一个记录排好位置,同时将待排序记录分割成独立的两部分。其中前部分的关键字都比后部分的关键字小。然后再分别对这两部分继续递归排序,以达到整个序列有序。

//第一趟排序int Partition(int a[], int low, int high){   	int pkey;	pkey = a[low];	while(low < high)	{   		while(a[high] >= pkey && low < high)			high--;		a[low] = a[high];		while(a[low] < pkey && low < high)			low++;		a[high] = a[low];	}	a[low] = pkey;	return low;}//进行递归排序void QSort(int a[], int low, int high){   	if(low < high)	{   		int mid = Partition(a, low, high);		QSort(a, low, mid-1);		QSort(a, mid+1, high);	}}void QuickSort(int a[], int n){   	QSort(a, 1, n);}

四、简单选择排序(Simple Selection Sort)

算法思想:

  1. 第一趟:
    在n个记录中选一个最小关键字的记录与第一个记录进行交换;
  2. 第二趟:
    在后n-1个记录中选一个最小关键字的记录与第二个记录交换;
  3. 第 i 趟:
    在后n-(i-1)个记录中选一个最小关键字的记 与第i个记录交换; 共需n-1趟。
void SelectSort(int a[], int n){   	int i, j;	int min, t;	for(i = 1; i

转载地址:http://vytpz.baihongyu.com/

你可能感兴趣的文章
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>
mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
查看>>
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>
Mysql join原理
查看>>
MySQL Join算法与调优白皮书(二)
查看>>
Mysql order by与limit混用陷阱
查看>>