黑马程序员技术交流社区
标题:
c学习中的疑惑
[打印本页]
作者:
JAH562
时间:
2014-10-23 10:18
标题:
c学习中的疑惑
#include <stdio.h>
test3(){
//排序便利数组 从小到大排
int num[4]={3,2,4,1};
int i,temp;
for(i=0;i<4;i++){
if(num[i]>num[i+1]){
temp=num[i+1];
num[i+1]=num[i];
num[i]=temp;
}
printf("%d\n",num[i]);
}
}
int main(){
test3();
return 0;
}
打印出来的怎么是:2,3,1,4
怎么没有排序出来 那有 出问题了 求 大神?
作者:
Beacon
时间:
2014-10-23 10:29
你这样肯定是排不了序的! 为什么呢 你一步一步跟一下程序你会发现,第一步你会实现2和3的交换 然后i++ 现在num
=3 num[i+1]=4 程序条件不满足 执行i++ 然后现在num
=4 num[i+1]=1 然后两者交换 就输出了2 3 1 4。如果要想排序 有很多方法 冒泡 选择 快排之类的 都很方便。我用快速排序给你写了一个例子 自己领悟下喔。
void sort(int arr[], int l, int r)
{
int i = l;
int j = r;
int x = arr[i];
if(l < r)
{
while(i < j)
{
while((i<j) && (arr[j]>x))
j--;
arr[i] = arr[j];
while((i<j) && (arr[i]<x))
i++;
arr[j] = arr[i];
}
arr[i] = x;
sort(arr, l, i-1);
sort(arr, i+1, r);
}
else
return;
}
int main() //快速排序
{
int i;
int arr[4] = {3,2,4,1};
sort(arr, 0, 3);
for(i = 0; i < 4; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
复制代码
作者:
monterr
时间:
2014-10-23 10:55
好东西,留存
作者:
zhao190109
时间:
2014-10-23 11:35
顶一个,加油还在战斗中的兄弟
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2