Не работает сортировка Qsort - C (СИ)

Узнай цену своей работы

Формулировка задачи:

начал разбираться си и столкнулся с проблемой, не подскажите почему не работает?
//program qsort
  #include<stdio.h>
  #include<stdlib.h>
int swap (int *array,int i, int j)
{
    int a;
    a=array[i];
    array[i]=array[j];
    array[j]=a;
    return(*array);
    
}
 
int sort(int *array ,int left,int right)
{
    int e=( (left+right) /2);
    int i=left;
    int j=right;
    
    do    {
    
        while ((array[i]<= array[(left+right)/2])&&(i<=e))
        {
            i++;
        }
    
        while ((array[j]>array[(left+right)/2])&&(j>=e))
        {
            j++;
        }
    
        if(i<=j)
        {
            swap(array,i,j);
        }
        
    } while(i<j);
    
    if (left<j)
    {
        sort(array,1,j);
    }
    
    if(i<right)
    {
        sort(array,i,right);
    }
    return *array ;
}
 
int main()
{
    int *array;
    int n ;
    printf("Write quantity of elements you want: ");
    scanf("%d",&n);
    array=(int*)malloc(sizeof( n));
        for(int i=0;i<n;i++)
    {
        printf("Write element from number %d: ",i+1);
        scanf("%d",&array[i]);
      
    }
    sort(array,0,n-1);

    for(int i=0;i<n;i++)
    {
        printf("%d",array[i]);
    }
    return 0;
    
}

Решение задачи: «Не работает сортировка Qsort»

textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 10
 
void swap (int *arr,int i, int j)
{   int a = arr[i];
    arr[i] = arr[j];
    arr[j] = a;
}
 
void sort(int *arr ,int left, int right)
{   int e = (arr[left]+arr[right])/2;   //средний опорный элемент
    int i = left;
    int j = right;
    
    do    
    {   while (arr[i]<e)    i++;    //пока не найдем слева что-то большое
        while (arr[j]>e)    j--;    //пока не найдем справа что-то маленькое
        if(i<=j)
        {   swap(arr,i,j);          //поменяли местами
            i++; j--;               //двинулись дальше
        }
    } while(i<j);
    
    if (left<j)
        sort(arr,left,j);           //продолжаем слева
      
    if(i<right)                     //продолжаем справа
         sort(arr,i,right);
}
 
int main()
{
    int *arr;
    arr=(int*)malloc(N*sizeof(int));
    srand((unsigned int) time(NULL));
    
    printf("Initial array:\n");
    for(int i=0;i<N;i++)
    {   arr[i]  = rand()%100;
        printf("%5d", arr[i]);
    }
    sort(arr,0,N-1);
    
    printf("\n\nSorted array:\n");
    for(int i=0;i<N;i++)
        printf("%5d", arr[i]);
 
    free(arr);
 
    flushall();
    getchar();
    return 0;
}

Объяснение кода листинга программы

  1. Объединение файлов stdio.h, stdlib.h и time.h для использования функций ввода-вывода, сортировки и работы со временем.
  2. Определение константы N для задания размера массива.
  3. Создание функции swap для обмена значениями двух переменных.
  4. Создание функции sort для сортировки массива методом двусторонней обходной сортировки.
  5. Инициализация массива случайными значениями в функции main.
  6. Вызов функции sort для сортировки массива.
  7. Вывод отсортированного массива в функции main.
  8. Освобождение памяти, выделенной под массив, с помощью функции free.
  9. Ожидание нажатия клавиши для завершения программы.
  10. Возврат значения 0 для успешного завершения программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы