В пузырьковой сортировке посчитать количество перестановок и сравнения - C (СИ)
Формулировка задачи:
В пузырьковой сортировке посчитать количество перестановок и сравнения
//point.c
# include "point.h"
void bubble_sort(int *arr, int n)
{
int i, j, t, flag;
for (i=0; i<n-1; i++)
{
flag=0;
for(j=0;j<n-1-i; j++)
if (arr[j]>arr[j+1])
{
flag=0;
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
if(flag!=0)
break;
}
}
void print_arr (int *arr, int n)
{
int i;
for(i=0; i<n; i++)
printf("%i", arr[i]);
}
//point.h
# include <stdio.h>
void bubble_sort(int *arr, int n);
void print_arr (int *arr, int n);
//main.c
#include "point.h"
int main ()
{
int arr[]={9,5,8,6,3,7,1};
print_arr(arr, sizeof arr/sizeof(int));
bubble_sort(arr, sizeof arr/sizeof(int));
printf("\n");
print_arr(arr, sizeof arr/sizeof(int));
return 0;
}Решение задачи: «В пузырьковой сортировке посчитать количество перестановок и сравнения»
textual
Листинг программы
#include <stdio.h>
int counter;
void bubble_sort(int *arr, int n)
{
int j, t, flag;
while (1)
{
flag=0;
for(j=0;j<n-1;j++)
if (arr[j]>arr[j+1])
{
flag=-1;
counter++;
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
if(flag==0) break;
}
}
void print_arr(int *arr, int n)
{
int i;
for (i=0; i<n; i++) printf("%d ",arr[i]);
printf("\n");
}
int main(int argc, char* argv[])
{
int Arr[12]={1,2,3,1,2,3,1,2,3,1,2,3};
counter=0;
print_arr(Arr,12);
bubble_sort(Arr,12);
print_arr(Arr,12);
printf("\ncounter=%d\n",counter);
return 0;
}
Объяснение кода листинга программы
- Объединение файлов .h и .c
- Объявление переменных:
- counter - для подсчета количества перестановок
- Arr - массив для сортировки
- Реализация пузырьковой сортировки:
- j, t, flag - вспомогательные переменные
- флаг устанавливается в 0 перед каждой итерацией
- если текущий элемент больше следующего, то:
- меняется флаг на -1
- увеличивается счетчик перестановок
- текущий элемент меняется местами с предыдущим
- Реализация вывода массива на экран
- В функции main():
- инициализация массива Arr
- вывод массива на экран до сортировки
- вызов функции сортировки
- вывод массива на экран после сортировки
- вывод значения счетчика перестановок