Сортировка массива методом деления - C (СИ)
Формулировка задачи:
Помогите пожалуйста с кодом---Сортировка массива методом диления, размер массива 7 направление сортировки по убыванию.
Решение задачи: «Сортировка массива методом деления»
textual
Листинг программы
// ConsoleApplication22.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "targetver.h"
#include "iostream"
#include "cstdlib"
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <time.h>
#define n 10
int main()
{
setlocale(LC_ALL, "Russian");
int i = 0, a = 0, b = 0, k = 0;
int nums[n];
srand(time(NULL));
for (i = 0; i < n; i++)
{
nums[i] = 0 + rand() % 11;
printf("%d ", nums[i]);
}
printf("\n");
// сортировка
int countswap = 0; //счетчик обменов
int countcompare = 0; //счетчик сравнений
for (i = 0; i < n; ++i)
{
int temp = nums[i]; //текущая позиция
int left = 0; //левый край
int right = i; //правый край
while (left<right) //пока левый край меньше правого
{
int middle = (left + right) / 2; //находим середину
if (temp >= nums[middle]) //если элемент больше середины
{
left = middle + 1; //левый край правее середины
}
else
right = middle; //иначе правый край равен середине
countcompare++;
}
int j;
for (j = i; j > left; --j)
{
int k;
k = nums[j - 1];
nums[j - 1] = nums[j]; //обмен
nums[j] = k;
countswap++;
}
}
printf("\n");
printf("Количество сравнений: %d\n", countcompare);
printf("Количество обменов: %d\n", countswap);
//------------------------------------
printf("отсортированный\n");
for (i = 0; i < n; i++)
printf("%d ", nums[i]);
getch();
}