Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include<stdlib.h>
- #include<time.h>
- void print_array(int* a,int n);
- void init_array(int *a,int n);
- int max_array(int *a, int n);
- int min_array(int *a, int n);
- void scan_array(int *a, int n);
- void bubble_sort(int *a, int n);
- void bubble_sort2(int *a, int n);
- void selection_sort(int *a,int n);
- void selection_sort2(int *a,int n);
- void vstavkami_sort(int *a, int n);
- void shift (int *a, int start, int end);
- int position_search(int *a, int n, int value);
- int main() { //генератор случайных чисел
- int n;
- printf("размер массива:\n");
- scanf("%d",&n);
- srand(123456);
- srand(time(NULL)); //возвращает колличесво секунд с нового года 1970 года
- int a[n];
- //scan_array(a,n);
- init_array(a,n);
- print_array(a,n);
- printf ("MAX значение:%d\n",max_array(a,n));
- printf ("MIN значение:%d\n",min_array(a,n));
- bubble_sort(a,n);
- bubble_sort2(a,n);
- selection_sort(a,n);
- print_array(a,n);
- selection_sort2(a,n);
- print_array(a,n);
- return 0;
- }
- void print_array(int *a,int n){
- for(int i = 0;i<n;i++){
- printf("%d\t",a[i]);
- }
- printf("\n");
- }
- void init_array(int *a,int n)
- {
- for(int i=0;i < n;i++)
- {
- a[i] = rand() % 100; //(-50) смещает интервал на 50 влево
- }
- }
- void scan_array(int *a,int n){
- for (int z = 0; z < n;z++){
- scanf("%d",&a[z]);
- }
- }
- int max_array(int *a, int n) {
- int max = a[0] ;
- for (int j = 1; j < n;j++){
- if( max < a[j]){
- max = a[j];
- }
- }
- return max;
- }
- int min_array(int *a, int n){
- int min = a[0];
- for (int j = 1; j < n;j++){
- if( min > a[j]){
- min = a[j];
- }
- }
- return min;
- }
- void swap(int *a, int *b) {
- int temp =*b;
- *b = *a;
- *a = temp;
- }
- void bubble_sort(int *a, int n){
- int flag = 1;
- for (int z = 0; z < n - 1; z ++){
- flag = 1;
- for (int j = 0; j < n - z- 1; j++ ){
- if(a[j] > a[j + 1]) {
- swap(a + j, a + j + 1);
- flag = 0;
- }
- }
- if (flag == 1) {
- break;
- }
- printf("Отсортированный Массив:\n");
- for(int f = 0;f < n;f++){
- printf("%d\t",a[f]);
- }
- printf("\n");
- getchar();
- }
- }
- void bubble_sort2(int *a, int n){
- int flag = 1;
- for (int j = 0; j < n - 1; j++ ){
- if(a[j] > a[j + 1]) {
- swap(a + j, a + j + 1);
- flag = 0;
- }
- }
- if (!flag) bubble_sort2(a, n - 1);
- }
- void selection_sort(int *a,int n){
- for (int i = 0; i < n - 1;i++){
- int min_index = min_array(a + i,n - i); // можно сказать что просто сдвигаем левую границу массива
- swap(a + i,a + i + min_index);
- }
- printf("Отсортированный Массив c вставками:\n");
- for(int f = 0;f < n;f++){
- printf("%d\t",a[f]);
- }
- printf("\n");
- getchar();
- }
- void selection_sort2(int *a,int n) {
- int min_index= min_array(a,n);
- swap (a, a + min_index);
- if (n > 2){
- selection_sort2(a + 1,n - 1);
- }
- printf("Отсортированный Массив вставками с рекурсией:\n");
- for(int f = 0;f < n;f++){
- printf("%d\t",a[f]);
- }
- printf("\n");
- getchar();
- }
- void shift(int *a, int start, int end)
- {
- int temp = a[end];
- for(int i = end; i > start - 1;i++){
- // swap(a + i, a + i + 1);
- //a[i + 1] = a[i];
- a[i] = a[i - 1];
- }
- a[start] =temp;
- return;
- }
- void vstavkami_sort(int *a, int n){
- for (int i = 1; i < n; i++) {
- if (a[i-1] > a[i]){
- int position = position_search(a, i, a[i]);
- shift(a,position, i);
- }
- }
- return;
- }
- int position_search(int *a, int n, int value){
- for (int i = 0; i < n; i++){
- if (a[i] > value) {
- return i;
- }
- } return n - 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement