Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    10

    [C] Partizionamento di un array

    ciao a tutti, mi serve un programma che fa il Partizionamento in 2 porzioni di un array in base ad un valore di discrimine.
    io ho usato questo algoritmo ma non so della sua effettiva funzione :
    #include <stdio.h>
    void insertion_sort(int n,int a[]);
    int main(){
    int i;
    int n;
    int num;
    printf("inserimento dimesione array \n");
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++){
    printf("numero %d \n",i);
    scanf("%d",&num);
    a[i]=num;
    }
    insertion_sort(n,a);
    }
    void insertion_sort(int n,int a[]){
    int i;
    int temp;
    int j;
    int m;
    m=3;//valore discriminante
    for(i=1;i<n;i++){
    temp=a[i];
    j=i-1;
    while(j>=0 && a[j]>temp){
    if(a[j]>m){
    a[j+1]=a[j];
    j--;
    }
    }
    a[j+1]=temp;
    }

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

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Se devi solo distinguere rispetto ad una soglia non serve ordinare l'array, puoi farlo in complessità lineare ( O(N) ) e ordinando parzialmente
    codice:
    #include <stdio.h>
    
    int partition(int a[], int n, int e) {
        int from, to;
        for(from = to = 0; from < n; ++from) {
            if(a[from] < e) {
                int tmp = a[to];
                a[to] = a[from];
                a[from] = tmp;
                ++to;
            }
        }
        return to;
    }
    
    
    #define N 8
    
    
    int main(void) {
        int i;
        int test[N] = {1283, 23, 5, 65, 2, 8, 56, 32};
        int split_on = 56;
        int split = partition(test, N, split_on);
        printf("Minori della soglia(%d): ", split_on);
        for(i = 0; i < split; ++i) {
            printf("%d ", test[i]);
        }
        printf("\nMaggiori o uguali alla soglia(%d): ", split_on);
        for(i = split; i < N; ++i) {
            printf("%d ", test[i]);
        }
        return 0;
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    10
    Grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.