selection sort swaps code example
Example 1: The number of swaps required in selection sort
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[111111], tmp[111111], ans;
void merge_sort(ll a[], ll b[], ll lo, ll hi)
{
ll i, j, k;
if (lo >= hi)
return;
ll mid = (lo + hi) / 2;
merge_sort(a, b, lo, mid);
merge_sort(a, b, mid + 1, hi);
i = lo;
j = mid + 1;
for (k = lo; k <= hi; k++)
if (j > hi)
b[k] = a[i++];
else if (i > mid)
b[k] = a[j++];
else if (a[i] <= a[j])
b[k] = a[i++];
else
{
b[k] = a[j++];
ans += mid - i + 1;
}
for (i = lo; i <= hi; i++)
a[i] = b[i];
}
int main(void)
{
ll t;
scanf("%lld", &t);
while (t--)
{
ll n, i;
scanf("%lld", &n);
for (i = 1; i <= n; i++)
scanf("%lld", &a[i]);
ans = 0;
merge_sort(a, tmp, 1, n);
printf("%lld\n", ans);
}
return 0;
}
Example 2: how to send values to a selection sorting function
1
2
3
4 #include <iostream>
5 using std::cout;
6 using std::endl;
7
8 #include <iomanip>
9 using std::setw;
10
11 void selectionSort( int * const, const int );
12 void swap( int * const, int * const );
13
14 int main()
15 {
16 const int arraySize = 10;
17 int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
18
19 cout << "Data items in original order\n";
20
21 for ( int i = 0; i < arraySize; i++ )
22 cout << setw( 4 ) << a[ i ];
23
24 selectionSort( a, arraySize );
25
26 cout << "\nData items in ascending order\n";
27
28 for ( int j = 0; j < arraySize; j++ )
29 cout << setw( 4 ) << a[ j ];
30
31 cout << endl;
32 return 0;
33 }
34
35
36 void selectionSort( int * const array, const int size )
37 {
38 int smallest;
39
40
41 for ( int i = 0; i < size - 1; i++ )
42 {
43 smallest = i;
44
45
46 for ( int index = i + 1; index < size; index++ )
47
48 if ( array[ index ] < array[ smallest ] )
49 smallest = index;
50
51 swap( &array[ i ], &array[ smallest ] );
52 }
53 }
54
55
56
57 void swap( int * const element1Ptr, int * const element2Ptr )
58 {
59 int hold = *element1Ptr;
60 *element1Ptr = *element2Ptr;
61 *element2Ptr = hold;
62 }