输入数字按顺序排序方法

    技术2024-07-05  71

    第一个就是冒泡排序法,几乎是最简单的排序方法:

    #include <stdio.h>#include <conio.h>#define N 10int main( void ){int i, j, temp ;int a[N] = {0,1,2,3,4,5,6,7,8,9};

    // 冒泡排序法进行排序for( i = 0; i < N - 1; i++ ){for( j = 0; j < N-i-1; j++ ){if( a[i] < a[j] ){temp = a[i] ;a[i] = a[j] ;a[j] = temp ;}}}//第一个for

    printf("你是入的十个数是:/n") ;for( i = 0; i < N; i++ ){printf("%d ",a[i] ) ;}getch() ;return 0 ;}

     

    下面的是选择排序法,比冒泡排序法的效率高:

    #include <stdio.h>#include <conio.h>#define N 10int main( void ){int i, j, k, temp ;int a[N] = {0,1,2,3,4,5,6,7,8,9};

    // 选择排序法进行排序for( i = 0; i < N - 1; i++ ){k = i ;for( j = i + 1; j < N; j++ ){if( a[k] < a[j] ){k = j ;}temp = a[i] ;a[i] = a[k] ;a[k] = temp ;}}//第一个for

    printf("你是入的十个数是:/n") ;for( i = 0; i < N; i++ ){printf("%d ",a[i] ) ;}getch() ;return 0 ;}

     

    下面的是插入排序法,比冒泡排序法和选择排序法的效率都要高:

    #include <stdio.h>#include <conio.h>#define N 10int main( void ){int i, j, key, temp ;int a[N] = {0,1,2,3,4,5,6,7,8,9};

    // 插入排序法进行排序for( i = 1; i < N ; i++ ){key = a[i] ;for( j = i - 1; j >= 0; j-- ){if( a[j] < key ){a[j+1] = a[j] ;}}a[j+1] = key ;}//第一个for

    printf("你是入的十个数是:/n") ;for( i = 0; i < N; i++ ){printf("%d ",a[i] ) ;}getch() ;return 0 ;}

    下面的是归并排序法,我是在看了《算法导论》之后才写的,我自己写不出来。代码写出来很简单,比其它一些书上的简单多了。归并排序法的效率是这四个排序法中效率最高的:

    #include <stdio.h>#include <conio.h>#define N 10

    void merge_sort( int *a, int p, int q, int r ){int i, j, k, m, n ;int array1[N], array2[N] ;// m和n分别是新建立的两个数组中// 元素的个数m = q - p + 1 ;n = r - q ;// 先把数组a[N],中的元素放进// 新建立的两个数组中for( i = 0; i < m; i++ ){array1[i] = *( a + p + i ) ;}for( j = 0; j < n; j++ ){array2[j] = *( a + q + j +1 ) ;}

    i = j = 0 ;k = p ; // k 不能被初始化为 0// 开始归并while( i < m && j < n ){if( array1[i] > array2[j] ){*( a + k ) = array1[i] ;++ k ;++ i ;}else{*( a + k ) = array2[j] ;++ k ;++ j ;}}

    // 归并每个数组剩下的元素while( i < m ){*( a + k ) = array1[i] ;++ k ;++ i ;}while( j < n ){*( a + k ) = array2[j] ;++ k ;++ j ;}}

    void merge( int *a, int p, int r ){int q ;// p >= r的情况就是要排序的元素只有一个,// 也就是说,它已经被排好了if( p < r ){q = (p + r)/2 ;merge( a, p, q ) ;merge( a, q + 1, r );merge_sort( a, p, q, r );}}// merge

    int main( void ){int i, j, key, temp ;int a[N] = {0,1,2,3,4,5,6,7,8,9};

    merge( a, 0, 9) ;printf("你是入的十个数是:/n") ;for( i = 0; i < 10; i++ ){printf("%d ",a[i] ) ;}getch() ;return 0 ;}

    最新回复(0)