點集排序(快速排序)

2021-09-23 20:37:41 字數 762 閱讀 2503

點集排序演算法,首先是要定義單個點如何確定大小,它不像數字那樣是一維的,點是乙個二維,所以在定義點的時候要定義點如何比較大小。

點的大小一般來說,都是從左到右,從下到上的乙個順序,也就是說首先比較x方向,然後再比較y方向。下面是我自己定義的乙個點的類:

class doxpoint2d

/* @介面 快速排序

* @引數 point2dpoint 被排序的點集

* @引數 int 待排序的起始位置

* @引數 int 待排序的終止位置

* @郵箱 [email protected]

* @時間 2023年5月28號

*/void quicksort(point2darray &node, int left, int right)

}node[left] = node[sidx];

node[sidx] = pt;

quicksort(node, left, sidx - 1);

quicksort(node, sidx + 1, right);

}/* @介面 將點集進行反轉

* @引數 point2darray 點集

* @郵箱 [email protected]

* @時間 2023年5月28號

*/void reversenode(point2darray &node)

}呼叫方法:

point2darray node;

//給點集中新增點

quicksort(node, true)

排序 快速排序

快速排序時實踐中最快的一直排序,平均時間是0 nlogn 最壞的情況是o n2 但是很容易將這種情況避免 空間複雜度 o n lgn 不穩定。快速排序時基於分治模式處理的,對乙個典型子陣列a p.r 排序的分治過程為三個步驟 1.分解 a p.r 被劃分為倆個 可能空 的子陣列a p q 1 和a ...

排序 快速排序

定義 在快速排序演算法中,使用了分治策略,將要排序的序列分成兩個子串行,然後遞迴地對子序列進行排序,直到整個序列排序完畢。步驟 1.在序列中選擇乙個關鍵元素作為軸 2.對序列進行重新排序,將比軸小的元素移到軸的前邊,比軸大的元素移動到軸的後面。在進行劃分之後,軸便在它最終的位置上 3.遞迴地對兩個子...

排序 快速排序

時間複雜度 快速排序每次將待排序陣列分為兩個部分 1 在理想狀況下,每一次都將待排序陣列劃分成等長兩個部分,則需要logn次劃分。2 在最壞情況下,即陣列已經有序或大致有序的情況下,每次劃分只能減少乙個元素,快速排序將不幸退化為氣泡排序,最壞情況為o n 2 快速排序的平均時間複雜度為o nlogn...