Untitled
unknown
c_cpp
3 years ago
7.8 kB
9
Indexable
//-------------------------------
// qsort
#include <bits/stdc++.h>
using namespace std;
int cmp(const void *a, const void *b)
{
return *(int *)a - *(int *)b; //小到大
};
int main()
{
int n = 0;
cin >> n;
int *arr = new int[n];
int tmp;
for (int i = 0; i < n; i++)
{
cin >> tmp;
arr[i] = tmp;
}
qsort(arr, n, sizeof(int), cmp); // a[n]
for (int i = 0; i < n; i++)
{
cout << arr[i];
}
return 0;
}
//-------------------------------
// heap sort
#include <iostream>
using namespace std;
void heapify(int *&arr, int N, int i)
{
int largest = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if (l < N && arr[l] > arr[largest])
largest = l;
if (r < N && arr[r] > arr[largest])
largest = r;
if (largest != i)
{
swap(arr[i], arr[largest]);
heapify(arr, N, largest);
}
}
void heapSort(int *&arr, int N)
{
for (int i = N / 2 - 1; i >= 0; i--)
{
heapify(arr, N, i);
}
for (int i = 0; i < N; ++i)
{
cout << arr[i] << " ";
}
for (int i = N - 1; i > 0; i--)
{
swap(arr[0], arr[i]);
heapify(arr, i, 0);
}
}
void printArray(int *&arr, int N)
{
for (int i = 0; i < N; ++i)
{
cout << arr[i] << " ";
}
cout << "\n";
}
int main()
{
int *arr = new int[6];
int tmp = 0;
for (int i = 0; i < 6; i++)
{
cin >> tmp;
arr[i] = tmp;
}
// int N = sizeof(arr) / sizeof(arr[0]);
//! Note that if you pass an array to a function, the above won't work since the array decays to a pointer and sizeof(array) returns the size of the pointer.
int N = 6;
// Function call
heapSort(arr, N);
cout << "Sorted array is \n";
printArray(arr, N);
}
//-------------------------------
// radix sort
#include <bits/stdc++.h>
using namespace std;
int findMax(int arr[], int n)
{
int i, max = arr[0], cnt = 0;
for (i = 1; i < n; i++)
{
if (arr[i] > max)
max = arr[i];
}
while (max > 0)
{
cnt++;
max = max / 10;
}
return cnt;
}
void radixSort(int arr[], int *bucket[], int n)
{
static int i, j[10], k, l, d = 1;
int digit = 0;
digit = findMax(arr, n);
// cout << "c: " << c << endl;
for (int m = 0; m < digit; m++)
{
for (i = 0; i < 10; i++)
j[i] = 0;
for (i = 0; i < n; i++)
{
k = (arr[i] / d) % 10;
cout << "k: " << k << endl;
bucket[k][j[k]++] = arr[i];
}
cout << "--------------------- " << endl;
l = 0; // array index
for (i = 0; i < 10; i++) // bucker row
{
for (k = 0; k < j[i]; k++) // bucket col
arr[l++] = bucket[i][k];
}
for (int t = 0; t < l; t++)
{
cout << "arr[t]: " << arr[t] << endl;
}
d *= 10;
}
}
int main()
{
int n, *arr, i;
int *bucket[10];
cout << "Enter no of element : ";
cin >> n;
arr = new int[n + 1];
for (i = 0; i < 10; i++)
bucket[i] = new int[n];
cout << "Enter array element : ";
for (i = 0; i < n; i++)
cin >> arr[i];
radixSort(arr, bucket, n);
cout << "Sorted array : ";
for (i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
//-------------------------------
// bucket sort
// Bucket sort in C++
#include <iomanip>
#include <iostream>
using namespace std;
#define NARRAY 7 // Array size
#define NBUCKET 6 // Number of buckets
#define INTERVAL 10 // Each bucket capacity
struct Node
{
int data;
struct Node *next;
};
void BucketSort(int arr[]);
struct Node *InsertionSort(struct Node *list);
void print(int arr[]);
void printBuckets(struct Node *list);
int getBucketIndex(int value);
// Sorting function
void BucketSort(int arr[])
{
int i, j;
struct Node **buckets;
// Create buckets and allocate memory size
buckets = (struct Node **)malloc(sizeof(struct Node *) * NBUCKET);
// Initialize empty buckets
for (i = 0; i < NBUCKET; ++i)
{
buckets[i] = NULL;
}
// Fill the buckets with respective elements
for (i = 0; i < NARRAY; ++i)
{
struct Node *current;
int pos = getBucketIndex(arr[i]);
current = (struct Node *)malloc(sizeof(struct Node));
current->data = arr[i];
current->next = buckets[pos];
buckets[pos] = current;
}
// Print the buckets along with their elements
for (i = 0; i < NBUCKET; i++)
{
cout << "Bucket[" << i << "] : ";
printBuckets(buckets[i]);
cout << endl;
}
// Sort the elements of each bucket
for (i = 0; i < NBUCKET; ++i)
{
buckets[i] = InsertionSort(buckets[i]);
}
cout << "-------------" << endl;
cout << "Bucktets after sorted" << endl;
for (i = 0; i < NBUCKET; i++)
{
cout << "Bucket[" << i << "] : ";
printBuckets(buckets[i]);
cout << endl;
}
// Put sorted elements on arr
for (j = 0, i = 0; i < NBUCKET; ++i)
{
struct Node *node;
node = buckets[i];
while (node)
{
arr[j++] = node->data;
node = node->next;
}
}
for (i = 0; i < NBUCKET; ++i)
{
struct Node *node;
node = buckets[i];
while (node)
{
struct Node *tmp;
tmp = node;
node = node->next;
free(tmp);
}
}
free(buckets);
return;
}
// Function to sort the elements of each bucket
struct Node *InsertionSort(struct Node *list)
{
struct Node *k, *nodeList;
if (list == 0 || list->next == 0)
{
return list;
}
nodeList = list;
k = list->next;
nodeList->next = 0;
while (k != 0)
{
struct Node *ptr;
if (nodeList->data > k->data)
{
struct Node *tmp;
tmp = k;
k = k->next;
tmp->next = nodeList;
nodeList = tmp;
continue;
}
for (ptr = nodeList; ptr->next != 0; ptr = ptr->next)
{
if (ptr->next->data > k->data)
break;
}
if (ptr->next != 0)
{
struct Node *tmp;
tmp = k;
k = k->next;
tmp->next = ptr->next;
ptr->next = tmp;
continue;
}
else
{
ptr->next = k;
k = k->next;
ptr->next->next = 0;
continue;
}
}
return nodeList;
}
int getBucketIndex(int value)
{
return value / INTERVAL;
}
// Print buckets
void print(int ar[])
{
int i;
for (i = 0; i < NARRAY; ++i)
{
cout << setw(3) << ar[i];
}
cout << endl;
}
void printBuckets(struct Node *list)
{
struct Node *cur = list;
while (cur)
{
cout << setw(3) << cur->data;
cur = cur->next;
}
}
// Driver code
int main(void)
{
int array[NARRAY] = {42, 32, 33, 52, 37, 47, 51};
cout << "Initial array: " << endl;
print(array);
cout << "-------------" << endl;
BucketSort(array);
cout << "-------------" << endl;
cout << "Sorted array: " << endl;
print(array);
}
//-------------------------------Editor is loading...