0

Can any one tell me what I am doing wrong. I am sorting a single linked list.

void ll::sort()
{
    for(int i=0;i<size-1;i++)
        {node *cptr = fptr;
            for(int j= 0;j<size-1;j++)
    {
        if((cptr->no) > (cptr->nxt->no))
        {
            if(cptr == fptr)
            { node *c2ptr = cptr->nxt;

                cptr->nxt=c2ptr->nxt;
                c2ptr->nxt=cptr;
                fptr = c2ptr;

            }
            else
            {
                node *c2ptr = cptr->nxt;
                node *tptr = fptr;
                while(tptr->nxt!=cptr)
                {   tptr=tptr->nxt;}

                cptr->nxt=c2ptr->nxt;
                c2ptr->nxt=cptr;
                tptr->nxt=c2ptr;


            }
        }
    cptr=cptr->nxt;
    }

}
}

Edited by H_beginner

3
Contributors
8
Replies
35
Views
3 Years
Discussion Span
Last Post by richieking
0

I would swap the data, not the link pointers. That makes sorting a lot easier. But your teacher may or may not allow that simple method.

0

You are doing everything wrong according to me.

Sorting is very simple once you understand how its done. Take a pencil and a paper and make a sketch.
you need a *temp to hold on to the checks in the if statement.
example

node::sort(){
node *temp=0;
node *start=head;
while(start !=0){
if(start.data > start->next.data){
   temp =start;
   start = start->next;
   start->next=temp;
   }else{
   start = start->next;
}
}
}

Writing from phone but i guess you got the idea.
Its not a working code. Its just to give you the idea.

0

Sorry, but that does not sort the linked list. You need to test it out with working code before trying to tell someone else how to do it.

0

This is not a working code. Sure but this example will sort for sure.
Once ii get home, i will post a working code about this style here.

Edited by richieking

0

Just like i promised... This is the sort.

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void bsort(vector<int> &v){  
    int temp,index = v.size();

    while(index > 0){
        if(v[index] > v[index-1]){
            temp= v[index];
            v[index]= v[index-1];
            v[index-1]=temp;
            bsort(v);

            }
            index--;

        }  
    }

int main()
{
vector <int> vec ={10 ,9, 8, 7, 6, 10, 12, 16, 20};
   bsort(vec);
for_each(vec.begin(), vec.end(),[](int c){ cout << c <<endl;});

return 0;
}
// out put
20
16
12
10
10
9
8
7
6

And the output.
You can change the sorting order if you understand the sorting trick.
Help yourself my friend.

1

I have figured it out was missing one line only.

{
    for(int i=0;i<size-2;i++)
        {node *cptr = fptr;
            while(cptr!=bptr)
    {
        if((cptr->no) > (cptr->nxt->no))
        {
            if(cptr == fptr)
            { node *c2ptr = cptr->nxt;

                cptr->nxt=c2ptr->nxt;
                c2ptr->nxt=cptr;
                fptr = c2ptr;
                cptr=c2ptr;
            }
            else
            {
                node *c2ptr = cptr->nxt;
                node *tptr = fptr;
                while(tptr->nxt!=cptr)
                {   tptr=tptr->nxt;}

                cptr->nxt=c2ptr->nxt;
                c2ptr->nxt=cptr;
                tptr->nxt=c2ptr;
                cptr=c2ptr;

            }
        }
    cptr=cptr->nxt;
    }

}
}
0

What i provided was a simple style or sorting a data.
If that algorithm can be used to sort linklist without a problem. I as on about sorting style. This is also applicable with link list.

I assume you are not doubting that are you ?
I know you are not but trying to be witty.
Good one. ))

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.