- 博客(7)
- 收藏
- 关注
原创 2016年43题(“快排思想”)
43.(15分)已知由n(n>=2)个正整数构成的集合A = { a_k | 0<= k< n },将其划分为两个不相交的子集A_1和A_2,元素个数分别是n_1和n_2,A_1和A_2中元素之和分别为S_1和S_2。设计一个尽可能高效的划分算法,满足|n_1 - n_2|最小且|S_1 - S_2|最大。解:(1)由题意知,将n/2个最小的元素放在A1中,其余元素放在A2中(n为偶数则平分;low0=++low;②若i<n/2,则枢轴及之前的所有元素均属于A1,继续对i之后(枢轴之后)的元素进行划分;
2025-04-25 14:20:13
719
原创 Heap Sort
/ 接下来就是重点了,如果 dad < max(左孩子,右孩子),显然以它为根的子树(注意是子树) 就是大根堆。// 2.循环(Heap_Sort中第一个for循环)依次进行,直到 以第y个节点作为 dad 的子树(注意是子树)左右两边 并不只有一个节点,也是一棵子树!// 继续将 发生交换的那一边的子树 调整至大根堆,直至 不满足循环内条件判断语句,循环结束。//发生了元素值的交换 就要进行 2、3、4···多轮的循环改造,直至 不满足循环内条件判断语句,该子树才是大根堆,循环结束。
2025-04-12 22:29:09
263
原创 Selection Sort
/(n-1)另一个说明:由 j=i+1 也可知,若i取得L.length-1(即最后元素的下标),则 j=length,L.elem[j] 越界访问。if(L.elem[j]<L.elem[min]){ //此处 条件表达式修改成 > ,则实现从大到小排序。=i){ //这里不加判断也可以,它的作用是:如果最小值的位置恰好就是对的,则无需与自身交换,节省些时间。//(n-1):第(n-1)轮时,仅需比较末尾两个元素,确定下最小元素后,最后余下的元素显然最大,数列已然有序。//初始化 动态顺序表。
2025-04-12 15:50:09
586
原创 Invert Sort
for(j=i-1;j--){ //第2个循环判断条件 切忌写成:L.elem[j]>L.elem[i]L.elem[j+1]=L.elem[j];//此处切忌写成:L.elem[i]=L.elem[j];i++){ //外层循环控制要插入的数,同时也可以表示已经排好的有序元素。平均 和 最坏: T(n)=O(n^2)//定义 动态顺序表 结构体类型。空间复杂度:S(n)=O(1)最好:T(n)=O(n)//初始化 动态顺序表。
2025-04-11 14:45:48
164
原创 Quick Sort
/PivotPos:pivot(分隔值)的元素下标,其左边元素都比它小(或等于);所以在high左移 找到第一个比pivot小的元素时 可以直接覆盖“low”(low所指的元素存放在pivot中,本次覆盖后 数组中high所指元素重复);//注意:L.elem[high]>=pivot, 这里一定千万要加等号,否则数组中出现 两个(或以上)值相同的元素时,会死循环。把数组中元素比它小的(以及和它相等的)放其左边,比它大的(以及和它相等的)放其右边。将比它小的元素(与low所指元素)交换。
2025-04-10 14:34:23
608
原创 Bubble Sort
/注意判断哨兵在外层循环中;表示 如果在某一轮前移动最小元素时,没有交换元素,此时循序表已然有序。DSTable L;最坏 和 平均 :T(n)=n^2。最好:T(n)=n(带哨兵的作用)//定义 动态顺序表 结构体类型。//初始化 动态顺序表。
2025-04-10 11:14:57
246
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅