用C语言程序对一组大小不定的数字排序拜托了各位 有一组大小不定的数字,需要设定程序对他们进行从小到大的排列.
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/05 16:48:06
![用C语言程序对一组大小不定的数字排序拜托了各位 有一组大小不定的数字,需要设定程序对他们进行从小到大的排列.](/uploads/image/z/1703955-3-5.jpg?t=%E7%94%A8C%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E5%AF%B9%E4%B8%80%E7%BB%84%E5%A4%A7%E5%B0%8F%E4%B8%8D%E5%AE%9A%E7%9A%84%E6%95%B0%E5%AD%97%E6%8E%92%E5%BA%8F%E6%8B%9C%E6%89%98%E4%BA%86%E5%90%84%E4%BD%8D+%E6%9C%89%E4%B8%80%E7%BB%84%E5%A4%A7%E5%B0%8F%E4%B8%8D%E5%AE%9A%E7%9A%84%E6%95%B0%E5%AD%97%2C%E9%9C%80%E8%A6%81%E8%AE%BE%E5%AE%9A%E7%A8%8B%E5%BA%8F%E5%AF%B9%E4%BB%96%E4%BB%AC%E8%BF%9B%E8%A1%8C%E4%BB%8E%E5%B0%8F%E5%88%B0%E5%A4%A7%E7%9A%84%E6%8E%92%E5%88%97.)
用C语言程序对一组大小不定的数字排序拜托了各位 有一组大小不定的数字,需要设定程序对他们进行从小到大的排列.
用C语言程序对一组大小不定的数字排序拜托了各位
有一组大小不定的数字,需要设定程序对他们进行从小到大的排列.
用C语言程序对一组大小不定的数字排序拜托了各位 有一组大小不定的数字,需要设定程序对他们进行从小到大的排列.
第一个就是冒泡排序法,几乎是最简单的排序方法: #include #include #define N 10 int 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 #include #define N 10 int 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 #include #define N 10 int 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 #include #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 ; }