four sorts problem

so i'm suposed to write code for bubble sort, insert sort, quick sort, and selection sort, from pre-written algorithm pseudo code so they're not the normal sorts syntactically. my bubble sort works, my select sort and insert sort work most of the way but for some reason the last number is always wrong. and the correct last number goes into r[n+1] (list[max+1]). can anyone tell me why or show me how to fix it? also i'm working on my quick sort but i'm a little lost. i'll post the pseudo code before if anyone has any ideas it would be greatly appreciated.
ps. the input data is temporary i have a input file with 10,000 integers i have to use.

update, my bubble sort works with an array of 10 positive integers, but when i use the 10,000 element array with - and + integers it no longer works anyone know why?

driver program
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>

using namespace std;


const int n = 10;
int r[n];




void swapEm(int &a, int &b)
{
	
	int temp;
	temp = a;
	a = b;
	b = temp;

}

void readEm(int r[], ofstream &outf)
{

	int i = 0;
	int length = 0;
	ifstream inf("input.dat");
	while (!inf.eof())
	{
		inf >> r[i];
		//outf << list[i] << endl;
		i++;

	}
	length = i;
	outf << "the length of the array is " << length << endl;
}
void bubbleSort(int r[], int n)
{
	

	for (int j = 0; j < n-1; j++)
	{
		
		for (int i = 0; i < n-1; i++)
		{
			
			if (r[i] > r[i + 1])
			swapEm(r[i], r[i+1]);
			
		}
		//n++;

	}
}

void selectionSort(int r[], int n)
{
	int k = 0;
	int small = k;
	for (k; k < n; k++)
	{
		for (int j = k + 1; r[j] < r[small];)
		{
			small = j;
			if(k != small)
			{
				swapEm(r[k], r[small]);
			}
		}
	}
	cout << r[10];
}

void insertSort(int r[], int n)
{
	int k, j, save;
	for (k = n-2; k > 0; k--)
	{
		j = k + 1;
		save = r[k];
		r[n - 1] = save;

		while (save > r[j])
		{
			r[j - 1] = r[j]; 
			j = j + 1;

		}
			
		r[j - 1] = save;
	
		
	} 
}

void quickSort(int r[], int left, int right)
{
	int left = 0;
	int right = n - 1;
	int j = 0;
	int k = right + 1;
	cout << "left = " << r[left] << endl;
	cout << "right = " << r[right] << endl;
	do
	{
		j = j + 1;
	} while (r[j] >= r[left]);
	{
	}
 }

void printEm(int r[], ofstream& outf, int n)
{
	{
		for (int i = 0; i <= n-1; i++)
			outf << r[i] << endl;
		

	}
	outf << endl << endl;
}

void main()
{
	int r[n + 1];
	ofstream outf("output.ot");
	readEm(r, outf);
	outf << "pre sorted list" << endl;
	printEm(r, outf, n);
	bubbleSort(r, n);
	outf << "after bubble sort of r" << endl;
	printEm(r, outf, n);
	selectionSort(r, n);
	outf << "after selection sort of r" << endl;
	printEm(r, outf, n);
	insertSort(r, n);
	outf << "after insertion sort of r" << endl;
	printEm(r, outf, n);
	quickSort(r, n);
	outf << "after quick sort of r" << endl;
}


psuedo code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
procedure Bubblesort(var: list; n:integer}
var j, i, save:integer;
begin
   for i:=1 to n-1 do for j := 1 to n-1 do if (r[j] > r[j+1])
then swap (r[j], r[j+1])
end;

procedure quicksort(left, right:integer)
begin
if left < right then
begin
j:=left;
k:=right +1;

repeat
  repeat j:=j+1 until (a[j]>= a[left] or (j > k));
  repeat k:= k-1 until (a[k] <= a[left]) or (k<0));
  if j < k then swap (a[j], a[k]);
until j>k;
swap(a[left], a[k]);
quicksort(left, k-1);
quicksort(k+1), right);
end;
   end;


procdedure insertsort (var r: list: n: integer)
varj, i, save: integer:
begin
  j:=k+1;
save:= r[k];
r[n+1] := save;
while save > r[j] do
begin
   r[j-1] := r[j];
j := j +1;
end;
r[j-1]:= save;
end;
end;

procedure select sort (var r: list; n:integer)
varj, k, small:integer;
begin
  if n> 1 then
  begin
   for k:= 1 to n-1 do
   begin
     small :=k;
     for j:= k+1 to n do if r[j] < r[small] then small :=j;
     if (k <> small ) then swap (r[k], r[small]);
   end;
end;


input data
1
2
3
4
5
6
7
8
9
10
7
3
5
22
2
71
14
36
11
1


output data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
the length of the array is 5
pre sorted list
7
5
2
14
11
0
0
0
0
0


after bubble sort of r
0
0
0
0
0
2
5
7
11
14


after selection sort of r
0
0
0
0
0
2
5
7
11
14


after insertion sort of r
0
0
0
0
0
2
5
7
11
14


after quick sort of r
Last edited on
Pretty sure we're doing to same program lol 🤔🤔.

But fixed your select sort for you:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void selectSort(int r[])
{
   
    if (n > 1)
    {
        for (int k = 0; k < n; k++)
        {
            int small = k;
            for (int j = k + 1; j < n; j++)
            {
                if (r[j] < r[small])
                {
                    numcomp += 1;
                    small = j;
                }
            }

            if (k != small)
                swapem(r[k], r[small]);
        }
    }
}
thanks, you're definietly further than i am. any suggestions for insertSort or quick sort?
For the insert:

On the for do k >= 0 . This is why your last number is not working.
that just changed the problem, now i lost the first element and it printed a copy of 7 "r[4]" at the end.
Topic archived. No new replies allowed.