Sorting in C: Why the double pointers when sorting pointers? (qsort)

  Рет қаралды 8,517

Jacob Sorber

Jacob Sorber

Күн бұрын

Пікірлер: 31
@SpeedingFlare
@SpeedingFlare 10 ай бұрын
At first glance I thought the video was about sorting an array of pointers by their address value haha
@victorgallet3174
@victorgallet3174 10 ай бұрын
same haha
@justcurious1940
@justcurious1940 10 ай бұрын
Hhh same, I was like why would we even want to sort random memory addresses.
@dhyey2316
@dhyey2316 10 ай бұрын
Much needed this video. Thank you for the detailed explanation of qsort function
@nzwgsy
@nzwgsy 10 ай бұрын
One disadvantage of using explicit types and sizes is that there's no way for someone reading the code to be sure they're correct without going and finding the definition of the array being sorted. A better approach is to use the language to derive the correct values. For example: qsort(values, sizeof values / sizeof values[0], sizeof values[0]); Also, your integer comparison function works fine for your example, but in the general case, it could suffer from overflow if a is a large positive number and b is a large negative number or vice versa. Better is to do explicit comparisons (and it's a good use for the ?: operator): return a > b ? 1 : a < b : -1 : 0;
@sseerrttww
@sseerrttww 10 ай бұрын
May the pointers be with you, my master.
@anon_y_mousse
@anon_y_mousse 9 ай бұрын
My favorite sorting algorithm is quick sort, because I can write a non-recursive version from memory and it's generally very efficient.
@greg4367
@greg4367 10 ай бұрын
New T Shirt? qsort() Creating chaos since 1972
@franchausqui912
@franchausqui912 10 ай бұрын
Cool, this looks like a kind of functional implementation in C, Beauty thing
@benjaminshinar9509
@benjaminshinar9509 6 ай бұрын
how is the swapping performed? is it just byte copying? I remember that in C++ you can overload the std::swap function for your type, but I don't remember much about C... also, I can't remember how you sort a linked list.
@jzxdrift
@jzxdrift 10 ай бұрын
Never say double pointer when referring to a pointer to pointer. Double pointer is naturally expected as double* which is pointer to double. It is more natural to say double pointer instead of pointer to double. You don't say pointer to character when referring to a string, you say char pointer. Same situation here
@yash1152
@yash1152 10 ай бұрын
yeah, "double pointer" is too ambiguous of a term here. i was thinking that the video would be about "sorting using two pointers" aka "sorting with double pointers approach" just for reference, current title is _"Sorting in C: Why the double pointers when sorting pointers? (qsort)"_
@rosen8757
@rosen8757 10 ай бұрын
There is an error in your int compare function, the subtraction can overflow (overflow term is used for both under and over) and overflow on signed integers is undefined behaviour in C.
@rob876
@rob876 10 ай бұрын
The fastest sorting algorithm of all is the network sort but it is different for different array lengths. It would be interesting if you could cover this algorithm for a number of fixed array lengths.
@yash1152
@yash1152 10 ай бұрын
have never heard of that before > _"fastest sorting algorithm of all is the network sort but it is different for different array lengths"_
@raptoress6131
@raptoress6131 10 ай бұрын
I thought the fastest sorting algorithm was radix?
@yash1152
@yash1152 10 ай бұрын
​@@raptoress6131 following are all "i think": * radix sort ain't memory efficient, requires as many buckets as the symbols (alphabets, digit, etc) in the elements * it ain't very local, so, cache localization etc can't optimize it * i.e. the fastness is limited only theoretically * whereas practically, it fails on both fronts > _"fastest sorting algorithm was radix?"_
@anon_y_mousse
@anon_y_mousse 9 ай бұрын
@@raptoress6131 It depends on your data type. The smaller, the better, such as for strings. For integers you can use multi-tiered buckets, but cache locality is a problem for larger element sizes and things like integers are faster to just use direct comparison.
@raptoress6131
@raptoress6131 10 ай бұрын
I should get to using void pointers... I've just avoided them whenever possible.
@martijnb3381
@martijnb3381 10 ай бұрын
Hello Jacob , i like your videos. And i hope you appreciate some feedback on your c code. I think it is best practice to determine the size of a pointer type in this way: MyType *p = (MyType *)malloc(sizeof(*p)); If Mytype becomes Mytype2 you always alloc the right amount of bytes. This also applies to other function calls, like qsort. The cast is for extra safety and to compile on C++. And i think you dont need the extra () to dereference a void pointer. So: int iNum = *(int *)arg;
@YilmazDurmaz
@YilmazDurmaz 10 ай бұрын
in other words, a structure like an object or an array will be "pointed", and a structure of structures will be "double pointed", and so on. easy to say, but a maze if not taken with care.
@muhzulqarnaen
@muhzulqarnaen 10 ай бұрын
excuse me. can we sort partially? like just one half of an array? thank you
@angelcaru
@angelcaru 6 ай бұрын
just pass in half of the length
@maduromaduro9826
@maduromaduro9826 10 ай бұрын
stable sorting algorithms ... i heard about spaghetti sort but i didn't find any code ... and parallel networking sort
@maxscott3349
@maxscott3349 10 ай бұрын
I would definitely be interested in sorting algorithm implementations. I haven't done anything with them yet and it's about time I learned. The standard library is great and is very helpful for quick stuff and has made an excellent introduction to C for many people, but I don't like getting too comfortable with it. For one thing, I'm here because I want to learn and every abstraction hides knowledge from me. For another, one of the best parts of C is you can quickly implement your own stuff exactly like you want it. You can do things like pass counters to functions that process or input strings or arrays so you can get exactly the information you want at exactly the point in the program where you need it without having to strlen everything or do any goofy stuff. Being able to express myself is a big part of the charm of C and assembly for me.
@C-CW
@C-CW 9 ай бұрын
There is no such thing called double pointer. It's pointer to pointer. At least kernel developers goes with this terminology. To be more specific, double means two times of thing, so what double pointer actually means is two pointers or a pair of pointers, which is not the case here.
@skeleton_craftGaming
@skeleton_craftGaming 10 ай бұрын
Man...
@obinator9065
@obinator9065 10 ай бұрын
This is one where C++ can outperform C due to inlining with lambda's instead of the disgusting function pointers 😅
@redabou9al562
@redabou9al562 10 ай бұрын
outperform only for bad c developer
@MrTrollland
@MrTrollland 10 ай бұрын
6.7.4 Function specifiers Syntax 1 function-specifier: inline Constraints 2 Function specifiers shall be used only in the declaration of an identifier for a function. 3 An inline definition of a function with external linkage shall not contain a definition of a modifiable object with static storage duration, and shall not contain a reference to an identifier with internal linkage. 4 In a hosted environment, the inline function specifier shall not appear in a declaration of main. Semantics 5 A function declared with an inline function specifier is an inline function. The function specifier may appear more than once; the behavior is the same as if it appeared only once. Making a function an inline function suggests that calls to the function be as fast as possible.120) The extent to which such suggestions are effective is implementation-defined.121) 🤔🤔
@noodlish
@noodlish 10 ай бұрын
Not my favourite by any means but sleepsort is an interesting example of lateral thinking.
How to sort part of an array in C
5:44
Jacob Sorber
Рет қаралды 6 М.
Pulling Back the Curtain on the Heap
21:38
Jacob Sorber
Рет қаралды 37 М.
They Chose Kindness Over Abuse in Their Team #shorts
00:20
I migliori trucchetti di Fabiosa
Рет қаралды 12 МЛН
How To Choose Mac N Cheese Date Night.. 🧀
00:58
Jojo Sim
Рет қаралды 88 МЛН
Make your Data Type more Abstract with Opaque Types in C
13:41
Jacob Sorber
Рет қаралды 51 М.
Qsort in C
15:40
Programming with Sikander
Рет қаралды 31 М.
How to Send and Receive UDP packets (in C)
23:20
Jacob Sorber
Рет қаралды 7 М.
Using the C library qsort function
9:24
Barry Brown
Рет қаралды 1,3 М.
The What, How, and Why of Void Pointers in C and C++?
13:12
Jacob Sorber
Рет қаралды 54 М.
How to Write Function-Like Preprocessor Macros (C example)
13:59
Jacob Sorber
Рет қаралды 43 М.
Dynamic Arrays in C
11:46
Dylan Falconer
Рет қаралды 70 М.
Stop using std::vector wrong
23:14
The Cherno
Рет қаралды 149 М.
Scanf Basics: the good, the bad, and why so many pointers?
15:07
Jacob Sorber
Рет қаралды 24 М.
You don't need Generics in C
1:37:38
Tsoding Daily
Рет қаралды 64 М.