C语言,简单冒泡排序排10个整数,分别按照升序降序输出,请问怎么实现?
论文问答
1
C语言,简单冒泡排序排10个整数,分别按照升序降序输出,请问怎么实现?
-
void foo(int * data, int n, int desc) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i; j++) { if ((data[j + 1] < data[j] && desc) || (data[j + 1] > data[j] && !desc)) { int t = data[j + 1]; data[j + 1] = data[j]; data[j] = t; } } } } int main() { int data[] = { 3, 2, 3, 4, 1, 9, 5, 2, 6, 8 }; for (int i = 0; i < 10; i++) printf("%d ", data[i]); printf("\n"); foo(data, 10, 0); for (int i = 0; i < 10; i++) printf("%d ", data[i]); printf("\n"); foo(data, 10, 1); for (int i = 0; i < 10; i++) printf("%d ", data[i]); printf("\n"); }
-
其中心思想是从左或从右两个两个交换,直到找到最大的或最小的放在首端或末端(内循环),对剩下的元素循环如此(外循环)。
因为每遍历一遍都找到一个确定的值最大值或最小值,需要排序的数组元素就少一个。
所以一个指针(下标)指向最后一个元素,外循环每循环一次就一个元素。从后面开始遍历。内循环则是还没排序的元素。
#include int main() { int a[10]={5,999,9,13,44,55,3,0,1,2}; int tmp=0; int i,j; for(j=9;j>=0;j--) { for(i=0;i<=(j-1);i++) if(a[i]>a[i+1]) { tmp=a[i]; a[i]=a[i+1]; a[i+1]=tmp; } } for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); return 0; }
这是从小到大,从大到小只是将if里的条件改一改。
发表回复