数据结构与算法分析——排序自我总结(1)

本文总结了内排序中的几种经典算法,包括插入排序、冒泡排序、选择排序、Shell排序、快速排序、堆排序以及分配排序和基数排序。通过实例详细解析了每种排序算法的原理和过程,帮助读者理解排序算法的工作方式。
摘要由CSDN通过智能技术生成

 

一、内排序

 

 

 

  1. 插入排序
template<typename E, typename Comp>
void inssort(E A[], int n) {  //Insertion Sort
	for (int i = 1; i<n; i++)
		for (int j = i; (j>0) && (Comp::prior(A[j], A[j - 1])); j--) //prior是bool值,返回true则说明排好序后A[j]应该在A[j-1]之前
			swap(A, j, j - 1);
}//Insertion Sort
	for (int i = 1; i<n; i++)
		for (int j = i; (j>0) && (Comp::prior(A[j], A[j - 1])); j--) //prior是bool值,返回true则说明排好序后A[j]应该在A[j-1]之前
			swap(A, j, j - 1);
}

 

原始排序:42 20 17 13 28 14 23 15

i=1:        20 42  17 13 28 14 23 15//20和42比之后,和42交换位置,以前都是排好序的了

i=2:        17 20 42  13 28 14 23 15

i=3:        13 17 20 42  28 14 23 15

i=4:        13 17 20 28 42  14 23 15//28和42比之后,和42交换位置,然后和20比之后不用交换,结束

i=7:        13 14 15 17 20 23 28 42 

总结:相当于左边是一个盒子,按顺序从右边取数据,然后插入该数据在左边盒子中的适当位置。

 

 

  2. 冒泡排序

template<typename E, typename Comp>
void bubsort(E A[], int n) {  //Bubble Sort
	for (int i = 0; i<n-1; i++)//Bubble up i'th record
		for (int j = n-1; j>i; j--) 
			if(Comp::prior(A[j], A[j - 1]))//prior是bool值,返回true则说明排好序后A[j]应该在A[j-1]之前
				swap(A, j, j - 1);
}//Bubble Sort
	for (int i = 0; i<n-1; i++)//Bubble up i'th record
		for (int j = n-1; j>i; j--) 
			if(Comp::prior(A[j], A[j - 1]))//prior是bool值,返回true则说明排好序后A[j]应该在A[j-1]之前
				swap(A, j, j - 1);
}

 

原始排序:42 20 17 13 28 14 23 15 

 

i=0: j=7      42 20 17 13 28 14 15 23//15比23小,所以交换

                 j=6       42 20 17 13 28 14 15 23//15比14大,所以不用交换

          j=5       42 20 17 13 14 28 15 23//14比28小,所以交换

                j=4       42 20 17 13 14 28 15 23//14比13大,所以不用交换

          j=3       42 20 13 17 14 28 15 23//13比17小,所以交换

          j=2       42 13 20 17 14 28 15 23//13比20小,所以交换

             j=1       13 │ 42 20 17 14 28 15 23//13比42小,所以交换

       i=1:j=7       13  42 20 17 14 28 15 23 //23比15大,所以不交换

              j=6        13  42 20 17 14 15<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值