黑马程序员技术交流社区
标题:
曾经头疼的排序 今天终于被我拿下了
[打印本页]
作者:
普通蜗牛
时间:
2015-7-23 21:02
标题:
曾经头疼的排序 今天终于被我拿下了
冒泡排序:
#include <stdio.h>
#include <stdlib.h>//生产随机数函数要用
#define N 10 //宏定义
int main(int argc, const char * argv[]) {
//题目:给数组赋值随机数,并从大到小排序
//定义数组
int a[N];
//定义控制变量i
int i;
//定义随机数
int randomNum;
//for循环对数组进行初始化
for (i=0; i<N; i++) {
//产生随机数
randomNum=arc4random_uniform(50);
//赋值给数组
a[i]=randomNum;
}
//为便于验证已成功赋值 遍历输出数组中的元素
printf("数组元素为:\n");
for (i=0; i<N; i++) {
printf("%d\t",a[i]);
}
printf("\n");
//声明排序函数
void bubbleSort(int a[ ], int n);
int len =sizeof(a)/sizeof(int);//数组长度
//调用排序函数
bubbleSort(a, len);//数组作为函数参数传值时传递数组名
//排序后 遍历输出数组中的元素
printf("排序后顺序为:\n");
for (i=0; i<N;i++) {
printf("%d\t",a[i]);
}
printf("\n");
return 0;
}
//定义排序函数
void bubbleSort(int a[ ], int n){//写函数时不要把数组长度写上
for (int j=0; j<n-1; j++) {//如果有n个数 则遍历n-1趟 所以j从0开始到小于n-1
for (int i=0; i<n-j-1;i++) {//第j趟有j个数字已经有序 没必要继续比较
// 所以 是n-j-1;
if (a[i]>a[i+1]) {
int temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
}
选择排序:
#include <stdio.h>
//选择排序 将最小值放在最开始的位置 以打擂台的形式进行
int main(int argc, const char * argv[]) {
int a[7]={45,23,6,2,77,34,74}; //定义一个数组
int len=sizeof(a)/sizeof(int); //定义数组长度,并赋值
void xuanZe(int a[],int len); //声明函数
xuanZe(a, len); //调用函数
printf("\n"); // 输出结果后 换行
return 0;
}
void xuanZe(int a[],int len){ //定义函数时 形参的类型也要注明
int i,j; //定义循环控制变量
for (i=0; i<len-1; i++) {
for (j=i+1; j<len-1-i; j++) {//用a[i]跟数组中其他的值进行比较
//在内层循环 只有j++ i不变
if (a[i]>a[j]) { //判断a[i]与a[j]谁小 把小的赋值给a[i]
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for (i=0; i<len; i++) { //选择排序完成后 遍历数组 输出排序结果
printf("%d\t",a[i]);
}
}
折半排序:
#include <stdio.h>
// 0 1 2 3 4
// 2 4 5 7 35
int zheBan(int a[],int key,int len){
int low=0; //定义一个低位
int high=len-1; //定义一个高位
while (low<=high) {
int mid=(low+high)/2; //取一个中间位置
if (a[mid]<key) { //如果中间位置的值比要查找的值小 则从右区间进行查找
low=mid+1; //改变低位的值 更改查找区间
}else if (a[mid]>key){ //若中间值大于要查找的值,则从左区间进行查找
high=mid-1; //改变高位的值 更改查找区间
}else{
printf("找到了,a[%d]==%d\n",mid,key);
//如果相等 则输出已经找到该数字
return mid;
}
}
// 0 1 2 3 4
// 2 4 5 7 35
printf("没有找到\n"); //当while的条件不再成立时 输出没有找到该数字
return 0;
}
int main(int argc, const char * argv[]) {
int a[5]={2,4,5,7,35}; //定义一个有序数组(数字由小到大排列)
zheBan(a, 7, 5); //调用函数
return 0;
}
作者:
ylxkab
时间:
2015-7-23 21:13
搞点题练练手就好啦
作者:
手残程序员
时间:
2015-7-23 21:21
努力就有收获
作者:
黑马灬小胖纸
时间:
2015-7-23 21:38
冒泡排序以前我也是比较头疼,主要在于调用函数那块没看懂
作者:
花漾
时间:
2015-7-23 22:05
恭喜恭喜!!
作者:
我的呸
时间:
2015-7-23 22:08
加油。。。
作者:
Foreversidy夏末
时间:
2015-7-23 22:11
继续努力!!!
作者:
shorfng
时间:
2015-7-23 22:20
不错,不错。加油
作者:
chensc
时间:
2015-7-24 06:28
学习学习!
作者:
wy911011
时间:
2015-7-24 08:19
加油吧,骚年
作者:
562413895@qq.co
时间:
2015-7-24 08:58
这三种排序了解了思想以后,自己动手写并且运行正确才是真的
作者:
skywan
时间:
2015-7-24 09:05
每天进步一点点
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2