黑马程序员技术交流社区
标题:
冒泡排序怎么弄,求教啊
[打印本页]
作者:
649685603
时间:
2015-12-2 23:38
标题:
冒泡排序怎么弄,求教啊
求大神教啊
作者:
徐小伟
时间:
2015-12-2 23:40
#include<stdio.h> void maoPao(int arr[],int length); { int temp; for(int i=0;i<length-1;i++){ for(int j=0;j<length-i-1;j++){ if(arr[j]>arr[j+1]){ temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } } int main(){ int a[10]={1,200,23,45,12,34,19,4,388,63}; maoPao(a,10); for(int i=0;i<10;i++){ printf("%d\t",a[i]); } return 0; }
作者:
649685603
时间:
2015-12-2 23:41
额 大神 你给的这么乱啊..
作者:
沐小妖mavs
时间:
2015-12-2 23:47
核心就是两两交换
作者:
刘炼1993
时间:
2015-12-2 23:50
百度一下
作者:
mangnani
时间:
2015-12-3 00:03
包含技术内容:选择排序 正序 倒序 冒泡排序 正序 倒序 输入 输出 函数调用 地址传递 三目运算符 等 包含了 前期基础的很多内容
函数功能:自己定义数组长度 输入元素 定义数组 选择 排序方法 以及 排序顺序 实现排序
总共100行左右的代码每一部分都有细节的注释
手打的,大家支持一下。
#include <stdio.h>
//通过参数传递 获得 数组地址 对主函数中的 数组 进行操作 接收数组长度 于 选择 正倒序 输出参数
void xuanZePaiXu(int a[],int len, int flag){
//定义一个 tempmax 假设为 数组元素中 最大值 所对应的 下标 为 0 也就是假设第一位是最大值
int tempmax=0;
//双层for循环 实现 比较 以及 交换
//外层for循环控制 需要排列的 数字有几个。比如数组有5个元素 只要排好4个即可 所以 i小于len-1
for (int i=0; i<len-1; i++) {
//tempmax=i 控制 每次 交换的起点 (比较元素 起点 )为i
tempmax=i;
//内循环控制 每一轮排序 需要比较的次数 j控制 被对比元素 起点 j=1+i
for (int j=1+i; j<len; j++) {
//通过单目运算符 实现 通过参数 控制 正序或 倒序 输出
// 比较 假设最大元素下表 于 其他元素进行比较 并对tempmx进行重新赋值
//若是小于 那么挑选出来的是 最小值 大于 是最大值
if (flag ? (a[tempmax]>a[j]):(a[tempmax]<a[j])) {
tempmax=j;
}
}
//每一轮求出来的最大或者最小元素 于 每一轮比较第一个元素进行交换
int temp=a;
a=a[tempmax];
a[tempmax]=temp;
}
}
// 通过 参数的传递 获得 需要改动的数组 于 数组的长度 以及 控制正序 倒序 输出的 参数flag
void maoPaoPaiXu(int a[],int len,int flag){
//定义变量 temp 为临时值 用于最后交换
int temp=0;
//外轮循环控制 需要排序的次数 5个元素的只需要排序4次 所以 循环次数 为len-1次
for (int i=0; i<len-1; i++) {
//内循环控制 每一轮比较的次数 j<len-1-i 每一轮少比较一次
// j也代表 比较元素的起点
for (int j=0; j<len-1-i; j++) {
// 通过比较 相邻值 大小 交换 前后数值 实现 大数下沉(正序)或 小数下沉(倒序)
//通过 参数 flag 以及三木元算 控制 正倒顺序,
if (flag?(a[j]>a[j+1]):(a[j]<a[j+1])) {
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
//定义一个输出 数组元素的函数 参数为 数组地址 以及 数组长度
void print_a(int a[],int len){
//通过for循环 实现 数组的输出
for (int i=0; i<len; i++) {
printf("%d\t",a);
}
printf("\n");
}
int main(int argc,const char*argv[]){
//定义一个选择方法 变量
int solution;
//定义一个数组变量 作为 数组长度
int len;
//提示用户输入 数组长度
printf("请输入一个数字规定 数组的长度\n");
//接收用户输入长度
scanf("%d",&len);
//通过len定义一个数组a
int a[len];
//提示用户输入元素完善数组
printf("请根据长度输入一组整形数字完善数组,每输入一个数用enter确认\n");
//通过for循环接受用户输入元素 完善数组
for (int i=0; i<len; i++) {
scanf("%d",&a);}
//输出 用户 完善的 数组
print_a(a,len);
int flag;
//提示用户 选择 正序活着倒序
printf("请选择正序或者倒序 排列数组 正序 输入1+enter 倒序输入 0+enter\n");
//接受用户输入的 flag
scanf("%d",&flag);
//提示用户 选择 排序方法
printf("请选择冒泡排序活着选择排序方法 排列数组 冒泡 输入1+enter 选择输入 0+enter\n");
//接受用户输入排序方法
scanf("%d",&solution);
//通过用户输入的参数 实现功能
solution?maoPaoPaiXu(a,len,flag):xuanZePaiXu(a,len,flag);
//通过 调用输出函数 实现输出元素
print_a(a,len);
}
作者:
牛角尖、
时间:
2015-12-3 09:16
就是用上一个数字对比下一个数字的思想
作者:
OnTheWay_1314
时间:
2015-12-3 10:06
#include <stdio.h>
void maoPao(int arr[],int len);
int main(int argc, const char * argv[])
{
int a[5]={10,2,33,46,5};
//排序前
for (int i = 0; i<5; i++)
{
printf("%d\t",a[i]);
}
printf("\n");
maoPao(a,5);
//排序后
for (int i = 0; i<5; i++)
{
printf("%d\t",a[i]);
}
return 0;
}
void maoPao(int arr[],int len)
{
int temp;
//外层循环跑len-1趟
for (int j = 0; j<len-1; j++)
{
//每一趟跑len-1-j
for (int i = 0; i<len-1-j; i++)
{
if (arr[i]>arr[i+1])
{
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
}
复制代码
作者:
Flowerkanzhe
时间:
2015-12-3 13:05
看看书吗,书上写得很详细的
作者:
jiuyeban
时间:
2015-12-3 18:58
都晕着呢..
作者:
paul20150103
时间:
2015-12-3 20:29
伟哥的视频认真看看就OK了
作者:
重拾辉煌
时间:
2015-12-3 20:59
自己画画图,多看看 就差不多。很简单的。
作者:
马尔代夫的日出
时间:
2015-12-3 21:31
不错.......................
作者:
打滚的橘子
时间:
2015-12-3 22:15
先看懂基础视屏里讲的思路,然后自己写下伪代码,再根据伪代码写代码。不要怕,勇敢的写,反正可以无限调试,即使写的不对,用单步调试调也能把代码调对。总之写就是了。
作者:
QQ15862772896
时间:
2015-12-4 01:53
视频里面应该讲得蛮清楚了 好好看看
作者:
黑马。。肖锋
时间:
2015-12-4 02:32
这大神的想法就是6啊!
作者:
MillerD
时间:
2015-12-4 21:49
核心就是两两交换,这句话是双关吗哈哈哈
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2