急求:用C语言程序对一组大小不定的数字排序
题目是:有一组大小不定的数字,需要设定程序对他们进行从小到大的排列。
追问:写个SORT的程序看看
题目是:有一组大小不定的数字,需要设定程序对他们进行从小到大的排列。
追问:写个SORT的程序看看
答案:第一个就是冒泡排序法,几乎是最简单的排序方法:#include <stdio.h>
#include <conio.h>
#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 ;
}
}
}//第一个forprintf("你是入的十个数是:\n") ;
for( i = 0; i < N; i++ ){
printf("%d ",a[i] ) ;
}
getch() ;
return 0 ;
}下面的是选择排序法,比冒泡排序法的效率高:
#include <stdio.h>
#include <conio.h>
#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 ;
}
}//第一个forprintf("你是入的十个数是:\n") ;
for( i = 0; i < N; i++ ){
printf("%d ",a[i] ) ;
}
getch() ;
return 0 ;
}下面的是插入排序法,比冒泡排序法和选择排序法的效率都要高:
#include <stdio.h>
#include <conio.h>
#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 ;
}//第一个forprintf("你是入的十个数是:\n") ;
for( i = 0; i < N; i++ ){
printf("%d ",a[i] ) ;
}
getch() ;
return 0 ;
}下面的是归并排序法,我是在看了《算法导论》之后才写的,我自己写不出来。代码写出来很简单,比其它一些书上的简单多了。归并排序法的效率是这四个排序法中效率最高的:
#include <stdio.h>
#include <conio.h>
#define N 10void 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 );
}
}// mergeint 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 ;
}c++直接用sort函数就行了冒泡排序 中 for( j = 0; j < N-i-1; j++ )
应为for(j=0;j<N-1;j++)
我试过了