#include <iostream>
#include <assert.h>
using namespace std;
struct LinkedList
{
int num;
LinkedList *next;
LinkedList *prev;
//default constructor
LinkedList::LinkedList()
:num(0), next(NULL), prev(NULL)
{}
//constructor
LinkedList::LinkedList(int i, LinkedList *n, LinkedList *p)
:num(i), next, prev(p)
{}
};
LinkedList* bubbleSort(int* array, int size){
int* copy= new int[size]; //copy for bubble sort algorithm
for(int i=0; i<size; i++){
copy=array;
}
bool swapped = true;
int j = 0;
int tmp; //bubblesort
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < size - j; i++) {
if (copy > copy[i + 1]) {
tmp = copy;
copy = copy[i + 1];
copy[i + 1] = tmp;
swapped = true;
}
}
}
LinkedList* bubblelist = new LinkedList(copy[0], NULL, NULL);
LinkedList* listcreator = bubblelist;
for(int i=1; i<size; i++){
listcreator->next = new LinkedList(copy, NULL, listcreator);
listcreator=listcreator->next;
}
LinkedList *counter=bubblelist;
int count=1;
while(counter->next!=NULL){
count++;
counter=counter->next;
}
assert(count=size); //checking
return bubblelist;
}
LinkedList *quickSort(int *array, int startPosition, int endPosition)
{
int i = startPosition;
int j = endPosition;
int pivot = array[(startPosition+endPosition)/2];
while(startPosition<j || i<endPosition){
while(array<pivot)
i++;
while(array[j]>pivot)
j--;
if(i<=j){
int temp = array;
array = array[j];
array[j] = temp;
i++;
j--;
}
else{
if(startPosition<j)
quickSort(array, startPosition, j);
if(i<endPosition)
quickSort(array,i,endPosition);
}
}
LinkedList* head = new LinkedList(array[0], NULL, NULL);
LinkedList* tail = head;
for(int i=1; i<endPosition; i++){
tail->next = new LinkedList(array, NULL, NULL);
tail=tail->next;
}
return head;
}
int main()
{
cout << "Enter the number of inputs: " ;
int size;
cin >> size;
int* array=new int[size];
cout << "Enter the numbers: ";
for(int i=0; i<size; i++)
{
cin >> array;
}
LinkedList* head = new LinkedList(array[0], NULL, NULL);
LinkedList* tail = head;
for(int i=1; i<size; i++){
tail->next = new LinkedList(array, NULL, NULL);
tail=tail->next;
}
LinkedList* b=bubbleSort(array, size);
//prints the bubble sort
for(int i=0; i<size; i++)
{
cout << b->num << endl;
b=b->next;
}
//quicksort algorithm.
int startPosition=0, endPosition=size-1;
LinkedList* answer=quickSort(array, startPosition, endPosition);
for(int i=0; i<size; i++)
{
cout << head->num << endl;
head=head->next;
}
system("pause");
return 0;
}
/*
Program hiç bir hata vermiyor. Bubble Sortlu kısmı çalışıyordu. Bir ekleme yaptım ve Quick sort fonksiyonu açtım ama quick sort kısmına girdikten sonra imleç return'e geliyor ve bir adım daha gidip paranteze geliyor sonra recursive(tekrar) kısmından
else{
if(startPosition<j)
quickSort(array, startPosition, j);
if(i<endPosition)
quickSort(array,i,endPosition);
}
tekrar başlıyor. Yani program fonksiyondan çıkamıyor gibi. Fonksiyonda bir imlecin return'den sonra çıkmayıp tekrar fonksiyona girmesine neden olan nedir?
Bir kişi yardım edebilirse çok minnettar kalacağım. Dün 6saat uğraştım çözemedim!
*/
#include <assert.h>
using namespace std;
struct LinkedList
{
int num;
LinkedList *next;
LinkedList *prev;
//default constructor
LinkedList::LinkedList()
:num(0), next(NULL), prev(NULL)
{}
//constructor
LinkedList::LinkedList(int i, LinkedList *n, LinkedList *p)
:num(i), next, prev(p)
{}
};
LinkedList* bubbleSort(int* array, int size){
int* copy= new int[size]; //copy for bubble sort algorithm
for(int i=0; i<size; i++){
copy=array;
}
bool swapped = true;
int j = 0;
int tmp; //bubblesort
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < size - j; i++) {
if (copy > copy[i + 1]) {
tmp = copy;
copy = copy[i + 1];
copy[i + 1] = tmp;
swapped = true;
}
}
}
LinkedList* bubblelist = new LinkedList(copy[0], NULL, NULL);
LinkedList* listcreator = bubblelist;
for(int i=1; i<size; i++){
listcreator->next = new LinkedList(copy, NULL, listcreator);
listcreator=listcreator->next;
}
LinkedList *counter=bubblelist;
int count=1;
while(counter->next!=NULL){
count++;
counter=counter->next;
}
assert(count=size); //checking
return bubblelist;
}
LinkedList *quickSort(int *array, int startPosition, int endPosition)
{
int i = startPosition;
int j = endPosition;
int pivot = array[(startPosition+endPosition)/2];
while(startPosition<j || i<endPosition){
while(array<pivot)
i++;
while(array[j]>pivot)
j--;
if(i<=j){
int temp = array;
array = array[j];
array[j] = temp;
i++;
j--;
}
else{
if(startPosition<j)
quickSort(array, startPosition, j);
if(i<endPosition)
quickSort(array,i,endPosition);
}
}
LinkedList* head = new LinkedList(array[0], NULL, NULL);
LinkedList* tail = head;
for(int i=1; i<endPosition; i++){
tail->next = new LinkedList(array, NULL, NULL);
tail=tail->next;
}
return head;
}
int main()
{
cout << "Enter the number of inputs: " ;
int size;
cin >> size;
int* array=new int[size];
cout << "Enter the numbers: ";
for(int i=0; i<size; i++)
{
cin >> array;
}
LinkedList* head = new LinkedList(array[0], NULL, NULL);
LinkedList* tail = head;
for(int i=1; i<size; i++){
tail->next = new LinkedList(array, NULL, NULL);
tail=tail->next;
}
LinkedList* b=bubbleSort(array, size);
//prints the bubble sort
for(int i=0; i<size; i++)
{
cout << b->num << endl;
b=b->next;
}
//quicksort algorithm.
int startPosition=0, endPosition=size-1;
LinkedList* answer=quickSort(array, startPosition, endPosition);
for(int i=0; i<size; i++)
{
cout << head->num << endl;
head=head->next;
}
system("pause");
return 0;
}
/*
Program hiç bir hata vermiyor. Bubble Sortlu kısmı çalışıyordu. Bir ekleme yaptım ve Quick sort fonksiyonu açtım ama quick sort kısmına girdikten sonra imleç return'e geliyor ve bir adım daha gidip paranteze geliyor sonra recursive(tekrar) kısmından
else{
if(startPosition<j)
quickSort(array, startPosition, j);
if(i<endPosition)
quickSort(array,i,endPosition);
}
tekrar başlıyor. Yani program fonksiyondan çıkamıyor gibi. Fonksiyonda bir imlecin return'den sonra çıkmayıp tekrar fonksiyona girmesine neden olan nedir?
Bir kişi yardım edebilirse çok minnettar kalacağım. Dün 6saat uğraştım çözemedim!
*/