网站遮罩是什么,wordpress评论差价,网站上面的内容里面放照片怎么做的,年会策划文章目录 交换排序简单选择排序堆排序归并排序 交换排序
冒泡排序的算法分析#xff1a;
冒泡排序最好的时间复杂度是O#xff08;n#xff09;冒泡排序最好的时间复杂度是O#xff08;n平方#xff09;冒泡排序平均时间复杂度为O#xff08;n的平方#xff09;冒泡排… 文章目录 交换排序简单选择排序堆排序归并排序 交换排序
冒泡排序的算法分析
冒泡排序最好的时间复杂度是On冒泡排序最好的时间复杂度是On平方冒泡排序平均时间复杂度为On的平方冒泡排序算法中增加一个辅助空间temp辅助空间为SnO1。冒泡排序是稳定的。
void bubble_sort(int arr[],int n);
void printArr(int arr[]);#define MAXSIZE 20 //设记录的值不超过20个
#define KeyType int//设关键字为整型量
#define InfoType int //定义InfoType的其他数据项typedef struct {KeyType key;//定义每个记录(数据元素)的结构InfoType otherinfo;//其他数据项
}RedType;typedef struct SqList {RedType r[MAXSIZE 1];//存储顺序表的结构//r[0]一般做哨兵或者缓冲区int length;//顺序表的长度
}SqList;//void bubble_sort(SqList L) {
// //使用flag作为是否有交换的标记
// int i,n,i,j;
// int flag 1;
// RedType x;
// for (i 1; i n - 1 flag 1; i) {
// flag 0;
// for (j 1; j i; j) {
// if (arr[] L.r[j 1][]) {
// //发生逆序
// flag 1;//发生交换flag置为1若本趟没发生交换flag保持为0.
// x arr;
// arr L.r[j 1];
// L.r[j 1] x;
// }
// }
// }
//}void bubble_sort(int arr[],int n) {//使用flag作为是否有交换的标记int i, j;int flag 1;int x;for (i 1; i n - 1 flag 1; i) {flag 0;for (j 1; j i; j) {if (arr[j] arr[j 1]) {//发生逆序flag 1;//发生交换flag置为1若本趟没发生交换flag保持为0.x arr[j];arr[j] arr[j 1];arr[j 1] x;}printf(第%d趟 , i);}}
}简单选择排序
选择最小的值进行排序。
堆排序
堆的定义 若n个元素的序列{a1a2…an}满足 则该序列分为小根堆和大根堆。 从堆的定义可以看出堆实质是满足如下性质的完全二叉树二叉树中任一非叶子节点均小于大于他的孩子结点。 堆排序 若在输出堆顶的最小值最大值后使得剩余n-1个元素的序列重新又建成一个堆则得到n个元素的次小值次大值…如此反复则有能得到一个有序序列这个过程称之为堆排序。
实现堆排序需解决的两个问题 如何由一个无序序列建成一个堆 单结点的二叉树是堆 在完全二叉树中所有以叶子结点序号为in/2为根的子树是堆。 由于堆实质上是一个线性表那么我们可以顺序存储一个堆。 步骤 从最后一个非叶子结点开始向前调整 ①调整从第n/2个元素开始将以该元素为根的二叉树调整为堆。 ②将以序号n/2-1的结点为根的二叉树调整为堆 ③将以序号n/2-2的结点为根的二叉树调整为堆 ④将以序号n/2-3的结点为根的二叉树调整为堆 如何输出堆顶元素后调整剩余元素为一个新的堆 小根堆 1.输出堆顶元素之后以堆中最后一个元素替代之。
2.然后将根结点值与左右子树的根结点值进行比较并与其中小者进行交换。
3.重复上述操作直至叶子结点将得到新的堆称这个从堆顶至叶子的调整过程为“筛选”。 下一次再输出堆顶元素27再将最后一个元素97向上调整。再选左右子树较小的那一个就是38再将38调上去再比较左右子树的大小。
算法性能分析
归并排序
基本思想将两个或两个以上的有序子序列“归并”成一个。 例二路归并归并树。 ![ [ ] 在这里插入图片描述
](https://img-blog.csdnimg.cn/direct/14c3d5b0f8d24c278f889998ec61ac28.png)