Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

quicksort (n arrays should be treated as 1 and values remapped as needed)

Tags:

c++

c

I have a linked list of arrays (struct at bottom of post)

Each array may have values like the below example

Array1[] = {6,36,8,23};
Array2[] = {8,23,5,73};
Array3[] = {2,5,1,9};

I need to sort these so that all 3 arrays are treated as 1 large array...

I need to use quicksort so that it uses in-place processing... I am working with very large arrays and cannot afford to use additional memory..

The result should be something like this

Array1[] = {1,2,5,5};
Array2[] = {6,8,8,9};
Array3[] = {23,23,36,73};

Currently i am only able to sort each array individually... but thats not exactly what i need :(

struct iSection {
    unsigned long     Section_Count; // Total # of points in this block of memory

    int              *Section_Arr;   // Point cloud for current block of memory
    struct iSection  *Next;          // Pointer to next section
} iSection;


struct iDatabase {
    struct iSection     *First_Section;
    struct iSection     *Last_Section;
} iDatabase;
like image 256
Steve Avatar asked May 13 '11 12:05

Steve


People also ask

Is quicksort a good way to sort an array?

If we want to sort an array without any extra space, quicksort is a good option. On average, time complexity is O (n log (n)). Move smaller elements to the left and move bigger elements to the right of the pivot

What is quicksort in JavaScript?

Like Merge Sort, QuickSort is a Divide and Conquer algorithm. It picks an element as pivot and partitions the given array around the picked pivot. There are many different versions of quickSort that pick pivot in different ways.

What is the time complexity of quicksort?

Quicksort is a divide and conquer algorithm. It first divides a large list into two smaller sub-lists and then recursively sort the two sub-lists. If we want to sort an array without any extra space, quicksort is a good option. On average, time complexity is O (n log (n)). The basic step of sorting an array are as follows:

What is quick sort in Python?

Last Updated : 28 Jun, 2021 Like Merge Sort, QuickSort is a Divide and Conquer algorithm. It picks an element as pivot and partitions the given array around the picked pivot. There are many different versions of quickSort that pick pivot in different ways.


1 Answers

It's not that hard, more an interfacing issue then an algorithmics issue.

Write a wrapper container that provides an interface for accessing members and writing (say operator[] in C++) and internally it maps the size_t index argument to the right array. This wrapper class does need the size of every array though to be able to correctly map the index.

An example pseudocode operator[] would be:

int& JointDatabase::operator[](size_t index) {
    // database is an iDatabase
    iSection *cur = database.First_Section;

    while (cur != database.Last_Section && index >= cur->Section_Count) {
        index -= cur->Section_Count;
        cur = cur->Next;
    }

    return cur->Section_Arr[index];
}

Then use this wrapper class as you would use a normal container in your Quicksort algorith.

like image 64
orlp Avatar answered Oct 05 '22 04:10

orlp