Другие языки программирования и технологии
Можно-ли использовать сортировку слиянием на массиве, состоящем из 10-ти элементов.
Задача: дан массив из 10-ти элементов. Составить программу для сортировки элементов методом слияния. Везде даны примеры, где массив состоит из 8-ми элементов. 8 элементов это конечно понятно, но вот 10 элементов, как мне кажется, вообще нельзя сделать. Если знаете, напишите алгоритм сортировки. Вот элементы для примера: 7, 3, 6, 8, 4, 9, 10, 1, 5, 2. Заранее спасибо.
Почему нельзя? Нужно просто показать исходный код твоей реализации "Сортировки слиянием". Вот я накидал такую примитивную реализацию и всё сортирует, можешь убедится перейдя по ссылке на компилер-online.
#include <stdio.h>
// слияние упорядоченных пар в массив
void __merge(int* arr, int* dst, int first, int mid, int last) {
int* off = dst;
int ipos = first;
int pos = mid + 1;
while((first <= mid) && (pos <= last)) {
if(arr[first] <= arr[pos])
*dst++ = arr[first++];
else
*dst++ = arr[pos++];
}
while(first <= mid)
*dst++ = arr[first++];
while(pos <= last)
*dst++ = arr[pos++];
int* ptr = arr + ipos;
while(off != dst)
*ptr++ = *off++;
}
// сортировки слиянием
void merge_sort(int* arr, int* tmp, int first, int last) {
if(first < last) {
int mid = (first + last) / 2;
merge_sort(arr, tmp, first, mid);
merge_sort(arr, tmp, mid + 1, last);
__merge(arr, tmp, first, mid, last);
}
}
int main(void){
const int N = 10;
int arr[N] = { 7, 3, 6, 8, 4, 9, 10, 1, 5, 2 };
int tmp[N];
merge_sort(arr, tmp, 0, N - 1);
for(int i = 0; i < N; ++i)
printf("%d ", arr[i]);
getchar();
return 0;
}
http://ideone.com/NBvkjB
#include <stdio.h>
// слияние упорядоченных пар в массив
void __merge(int* arr, int* dst, int first, int mid, int last) {
int* off = dst;
int ipos = first;
int pos = mid + 1;
while((first <= mid) && (pos <= last)) {
if(arr[first] <= arr[pos])
*dst++ = arr[first++];
else
*dst++ = arr[pos++];
}
while(first <= mid)
*dst++ = arr[first++];
while(pos <= last)
*dst++ = arr[pos++];
int* ptr = arr + ipos;
while(off != dst)
*ptr++ = *off++;
}
// сортировки слиянием
void merge_sort(int* arr, int* tmp, int first, int last) {
if(first < last) {
int mid = (first + last) / 2;
merge_sort(arr, tmp, first, mid);
merge_sort(arr, tmp, mid + 1, last);
__merge(arr, tmp, first, mid, last);
}
}
int main(void){
const int N = 10;
int arr[N] = { 7, 3, 6, 8, 4, 9, 10, 1, 5, 2 };
int tmp[N];
merge_sort(arr, tmp, 0, N - 1);
for(int i = 0; i < N; ++i)
printf("%d ", arr[i]);
getchar();
return 0;
}
http://ideone.com/NBvkjB
Конечно можно!
Даже для одного элемента в массиве можно применить данную сортировку.
Даже для одного элемента в массиве можно применить данную сортировку.
Похожие вопросы
- В одномерном массиве, состоящем из n вещественных элементов, вычис- лить: 39 1) сумму положительных элементов массив
- Microsoft Visual C++ 6.0 В одномерном массиве, состоящем из n вещественных элементов, вычислить...
- Язык Си: В одномерном массиве, состоящем из n вещественных элементов, вычислить: номер максимального по модулю элемента
- как при сортировке одномерного массива оставить на месте неположительные элементы
- Сортировка Естественным слиянием одномерного массива
- Сортировка 2-мерного массива в С++
- Массивы. как в массиве найти 3 наименьших числа не используя сортировку если можно код
- Сортировка двумерного динамического массива
- Сортировка вставками и сортировка слиянием!
- СРОЧНО ПАСКАЛЬ задан одномерный массив с (1..10), дать ответ: каких элементов больше: положительных или отрицательных