Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2017, 13:43   #1
1Ace
 
Регистрация: 15.09.2016
Сообщений: 4
По умолчанию Сортировки проблема

Здравствуйте, вот код. case1,2,3 в ствитче w должны выполнять сортировку по возрастанию , убыванию и рандом не выполняют свои функции, не знаю почему помогите разобраться . И когда пользователь вводит n нужно чтобы он вводил число, если он вводит буквы то сказать ему что нужно вводить цифры.И если можно подскажите как замерить время работы применяемой сортировки в тактах?Спасибо !

Код:
#include <stdio.h> 
#include <conio.h> 
#include <malloc.h> 
#include <stdlib.h>
 
int* SortBub(int* a, int n){ 
 int tmp; 
 
 for (int i=0; i<n; i++) 
 scanf("%i",&a[i]); 
 
 for (int i=0; i<n; i++) { 
 for (int j=i; j>0; j--) { 
if (a[j] < a[j-1]) { 
 tmp=a[j]; 
 a[j]=a[j-1]; 
 a[j-1]=tmp; 
 } 
 } 
 } 
 
 for (int i=0; i<n; i++) 
 printf("%i ",a[i]); 
getch(); 
} 
 
 
 
 
int* SortInsertion(int* a,int n) 
{ 
 int e, l; 
 for (int i=0; i<n; i++) 
 scanf("%i",&a[i]); 
 
 for (int i=1; i<n; i++) 
 { 
 e=a[i]; 
 l=i-1; 
 while(l>=0 && a[l]>e) 
 { 
 a[l+1]=a[l]; 
 l=l-1; 
 } 
 a[l+1]=e; 
 } 
 for (int i=0; i<n; i++) 
 printf("%i ",a[i]); 
} 
 
 
int* SortChoice(int* a, int n){ 
 int buf; 
 int min; 
 for (int i=0; i<n; i++) 
 scanf("%i",&a[i]); 
 for(int i=0; i<n-1; i++) { 
 min=i; 
 for(int j=i+1; j<n; j++) 
 if(a[j] < a[min]) 
 min=j; 
 
 buf=a[i]; 
 a[i]=a[min]; 
 a[min]=buf; 
 } 
 
 for(int i=0; i<n; i++) 
 printf("%i ", a[i]); 
 
} 
 
 
 
 
void merge(int *arr, int p, int q, int r) 
{ 
 int i,j,k; 
 int n1 = q - p; 
 int n2 = r - q; 
 int *larr,*rarr; 
 
 if(n1==0 || n2==0) 
 return; 
 
 larr = (int*)malloc(sizeof(int)*n1); 
 rarr = (int*)malloc(sizeof(int)*n2); 
 
 for( i = 0; i < n1; i++ ) 
 larr[i] = arr[p+i]; 
 for( j = 0; j < n2; j++ ) 
 rarr[j] = arr[q+j]; 
 
 i = 0; 
 j = 0; 
 
 for( k = p; k < r; k++ ) { 
 if(j==n2 || ( i < n1 && larr[i] <= rarr[j]) ) 
 arr[k] = larr[i++]; 
 else 
 arr[k] = rarr[j++]; 
 } 
 free(larr); 
 free(rarr); 
} 
 
void merge_sort( int *arr, int p, int r ) 
{ 
 int q; 
 
 if( r-p > 1 ) { 
 q = (p+r)/2; 
 merge_sort( arr, p, q ); 
 merge_sort( arr, q, r); 
 merge(arr,p,q,r); 
 } 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
int main(){ 
 int n; 
 int f,i,w,o; 
 printf("Write massive size\n"); 
 scanf("%i",&n);
 printf("Choose type before sorting:\n1-Increase\n2-decrease\n3-random\n"); 
 scanf("%i",&w);
 int* a=(int*)malloc(n*sizeof(int)); 
 switch(w){
 case 1 : for(o=0;o<n;o++) a[o]=o; break;
 case 2 : for (o=n;o>=0;o--)a[o]=o;break;
 case 3 : for(int i=o;i<n;i++) a[i]=0+rand()%100;
 }
 
 
 
 printf("Please, choose type of sort:\n1-Bubble sort\n2-Insertion sort\n3-Choice sort\n4-Merge sort\n"); 
 scanf("%i",&f); 
 
 switch (f){ 
 case 1: SortBub(a,n); break; 
 case 2: SortInsertion(a,n); break; 
 case 3: SortChoice(a,n); break; 
 case 4: { merge_sort( a, 0, n );
 for(int i=0; i<n; i++) 
 printf("%i ", a[i]); 
 break;} 
 
 } 
 
 
 
 
 
getch(); 
}
1Ace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить эффективность алгоритмов шейкерной сортировки и сортировки слиянием (язык C) Ольга210993 Помощь студентам 2 20.09.2012 13:52
проблема сортировки в матрице apel1806 Помощь студентам 0 28.05.2012 15:27
структуры данных. проблема сортировки однонаправленного списка. s-mumrik Общие вопросы C/C++ 0 24.05.2012 15:46
Проблема Шейкер-сортировки vs алгоритма простого слияния... a9N2k Помощь студентам 5 06.02.2011 12:43
Проблема с алгоритмом быстрой сортировки maryan.vetrov Общие вопросы C/C++ 2 31.08.2010 18:56