小弟初学C语言,写了一个排序程序,请高手指点。
小弟初学,没有参考别的程序,自己写的,不知合不合理?
#include <stdio.h>
#define SIZE 5
sort_array(int*, int);
main()
{
int array[SIZE];
int i;
printf("please enter %d numbers\n", SIZE);
for(i = 0; i < SIZE; i++)
scanf("%d", array + i);
printf("\nbefore sorted...\n");
for(i = 0; i < SIZE; i++)
printf("%d ", *(array + i));
printf("\n");
sort_array(array, SIZE);
printf("\nafter sorted...\n");
for(i = 0; i < SIZE; i++)
printf("%d ", *(array + i));
printf("\n");
}
sort_array(int *array, int length)
{
int i, j, temp;
for(i = length - 1; i > 0; i--)
{
for(j = length - 1; j > length - i - 2; j--)
{
/*if the second element is smaller,
put it one position ahead*/
if(*(array + j) < *(array + j - 1))
{
temp = *(array + j);
*(array + j) = *(array + j - 1);
*(array + j - 1) = temp;
}
}
}
}
问题点数:50、回复次数:12Top
1 楼llf_hust()回复于 2005-09-24 00:57:14 得分 10
#include <stdio.h>
#define SIZE 5
void sort_array(int*, int);
int main()
{
int array[SIZE];
int i;
printf("please enter %d numbers\n", SIZE);
for(i = 0; i < SIZE; i++)
scanf("%d", array + i);
printf("\nbefore sorted...\n");
for(i = 0; i < SIZE; i++)
printf("%d ", *(array + i));
printf("\n");
sort_array(array, SIZE);
printf("\nafter sorted...\n");
for(i = 0; i < SIZE; i++)
printf("%d ", *(array + i));
printf("\n");
return 0;
}
void sort_array(int *array, int length)
{
int i, j, temp;
for(i = length - 1; i > 0; i--)
{
for(j = length - 1; j > length - i - 1; j--)
{
/*if the second element is smaller,
put it one position ahead*/
if(*(array + j) < *(array + j - 1))
{
temp = *(array + j);
*(array + j) = *(array + j - 1);
*(array + j - 1) = temp;
}
}
}
}
Top
2 楼xiaoyaxin()回复于 2005-09-24 04:15:39 得分 5
这里有一个很好的例子:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
void main(void)
{
typedef vector<int> int_vector;
typedef istream_iterator<int> istream_itr;
typedef ostream_iterator<int> ostream_itr;
typedef back_insert_iterator< int_vector > back_ins_itr;
// STL中的vector容器
int_vector num;
// 从标准输入设备读入整数,
// 直到输入的是非整型数据为止
copy(istream_itr(cin), istream_itr(), back_ins_itr(num));
// STL中的排序算法
sort(num.begin(), num.end());
// 将排序结果输出到标准输出设备
copy(num.begin(), num.end(), ostream_itr(cout, "\n"));
}
Top
3 楼Panther105(猎豹)回复于 2005-09-24 07:59:50 得分 5
自定义函数最好放在主程序外,这样可以方便其他的程序使用该函数.
使用冒泡法排序应注意每次循环的末元素应该从首元素开始.如你的sort_array(int *array, int length)函数中
for(j = length - 1; j > length - i - 2; j--)
j应该为j > length - i - 1
Top
4 楼snowbirdfly(专心搞好嵌入式~~~)回复于 2005-09-24 08:06:09 得分 5
void sort_array(int *array, int length)
{
int i, j, temp;
for(i = length - 1; i > 0; i--)
{
for(j = length - i; j > 0; j--)// 修改一下~~
{
/*if the second element is smaller,
put it one position ahead*/
if(*(array + j) < *(array + j - 1))
{
temp = *(array + j);
*(array + j) = *(array + j - 1);
*(array + j - 1) = temp;
}
}
}
}
建议楼主看看数据结构关于排序那个章节~~~
Top
5 楼jsjjms(专心研究嵌入式)回复于 2005-09-24 14:03:23 得分 2
写得不错,鼓掌:-)
Top
6 楼jixingzhong(瞌睡虫·星辰)回复于 2005-09-24 14:17:26 得分 5
呵呵 相当不错 !! 鼓掌
几个小细节很注意, 代码的风格也不错 ~ ,以后继续保持吧 ~
起泡会了, 可以看看稍微好写的算法吧, 选择和它差不多, 估计你应该会了 , 可以学学 快排之类的高效率算法 ...
继续努力吧 ~Top
7 楼syril2005(syril2005)回复于 2005-09-25 09:02:47 得分 3
第二人复怎么看不懂,用到了很多函数吧,这些库函不是很常用Top
8 楼syril2005(syril2005)回复于 2005-09-25 09:04:39 得分 4
以上基本思想应该都是相同的,没有多大的分别,一般都能够实现Top
9 楼kprzen(小康)回复于 2005-09-25 15:46:05 得分 4
鼓励一下!
Top
10 楼snowred_bai(雪血)回复于 2005-09-25 16:57:20 得分 4
不错!Top
11 楼fei8326(天际飞云)回复于 2005-09-25 17:04:52 得分 3
2楼的是c++写的吧。哈哈 很轻松呀
Top
12 楼Dan1980()回复于 2005-09-26 20:01:30 得分 0
谢谢大家的鼓励,我会继续努力的!Top




