How it works
Distribution sort using card game patience rules.
Implementation
function patienceSort(arr) { const piles = []; for (const v of arr) { let placed = false; for (const pile of piles) if (pile[pile.length-1] >= v) { pile.push(v); placed = true; break; } if (!placed) piles.push([v]); } // Merge piles using a min-heap }
def patience_sort(arr): piles = [] for v in arr: placed = False for pile in piles: if pile[-1] >= v: pile.append(v); placed = True; break if not placed: piles.append([v]) # Merge piles using heapq
void patienceSort(vector<int>& arr) { vector<vector<int>> piles; for (int v : arr) { bool placed = false; for (auto& pile : piles) if (pile.back() >= v) { pile.push_back(v); placed = true; break; } if (!placed) piles.push_back({v}); } // Merge piles using priority_queue }
void PatienceSort(int[] arr) { var piles = new List<List<int>>(); foreach (int v in arr) { bool placed = false; foreach (var pile in piles) if (pile[^1] >= v) { pile.Add(v); placed = true; break; } if (!placed) piles.Add(new List<int> { v }); } // Merge piles using PriorityQueue }
void patienceSort(int arr[], int n) { int piles[n][n], pLen[n], nPiles = 0; for (int i = 0; i < n; i++) { int placed = 0; for (int p = 0; p < nPiles; p++) if (piles[p][pLen[p]-1] >= arr[i]) { piles[p][pLen[p]++] = arr[i]; placed = 1; break; } if (!placed) { pLen[nPiles] = 1; piles[nPiles++][0] = arr[i]; } } // Merge piles using min-heap }