c语言》排序法
2015-08-07 10:39
323 查看
排序法
1.选择排序法
思路:在自定义函数中定义两个局部变量i,j;
i<数组长度;
j=i+1 j<数组长度;
if(array[i]<array[j]){//if(array[i]<array[j])可省略
int t,
t=array[i];
array[i]=array[j];}
主函数输出:printf("%d",array[i]);
//代码:从小到大排序 if (array[i]>array[j])
从大到大排序 if (array[j]>array[i])
2.冒泡排序法
思路:
若数组array元素长度为固定值n,可特设array[n+1]
在条件取下标值为1且小于n+1
for循环
for (i=1; i<n-1; i++)
for (j=1; j<n+1-i; j++)
if (array[j]>array[j+1])
t=array[j];
array[j]=array[j+1]
array[j+1]=t;
思路:
若数组array元素长度为固定值n,可特设array
在条件取下标值为0且小于n
for循环
for (i=0; i<n-1; i++)
for (j=0; j<n-1-i; j++)
if (array[j]>array[j+1])
t=array[j];
array[j]=array[j+1]
array[j+1]=t;
3.希尔排序
1.选择排序法
思路:在自定义函数中定义两个局部变量i,j;
i<数组长度;
j=i+1 j<数组长度;
if(array[i]<array[j]){//if(array[i]<array[j])可省略
int t,
t=array[i];
array[i]=array[j];}
主函数输出:printf("%d",array[i]);
//代码:从小到大排序 if (array[i]>array[j])
从大到大排序 if (array[j]>array[i])
#include <stdio.h> int main(int argc, const char * argv[]) { int array[]={1,2,4,6,3,5,0,8,9};//没确定数组长度array[]可用sizeof求出 int i,j,temp; int z=sizeof(array)/sizeof(int); for (i=0; i<z; i++) { for (j=i+1; j<z; j++) { if (array[i]>array[j]) { temp=array[i]; array[i]=array[j]; array[j]=temp; } } printf("%d",array[i]); } printf("\n"); return 0; }
2.冒泡排序法
思路:
若数组array元素长度为固定值n,可特设array[n+1]
在条件取下标值为1且小于n+1
for循环
for (i=1; i<n-1; i++)
for (j=1; j<n+1-i; j++)
if (array[j]>array[j+1])
t=array[j];
array[j]=array[j+1]
array[j+1]=t;
#include <stdio.h> int main(int argc, const char * argv[]) { int array[11]; int i,j,t; printf("请输入数值:"); for (i=1; i<11; i++) { scanf("%d",&array[i]); } for (i=1; i<10; i++) { for (j=1; j<11-i; j++) { if (array[j]>array[j+1]) { t=array[j]; array[j]=array[j+1]; array[j+1]=t; } } } printf("排序后:"); for (i=1; i<11; i++) { printf("%d",array[i]); } printf("\n"); return 0; }
思路:
若数组array元素长度为固定值n,可特设array
在条件取下标值为0且小于n
for循环
for (i=0; i<n-1; i++)
for (j=0; j<n-1-i; j++)
if (array[j]>array[j+1])
t=array[j];
array[j]=array[j+1]
array[j+1]=t;
方法二 #include <stdio.h> int main(int argc, const char * argv[]) { int array[10]; int i,j,t; printf("请输入数值:"); for (i=0; i<10; i++) { scanf("%d",&array[i]); } for (i=0; i<10-1; i++) { for (j=0; j<10-1-i; j++) { if (array[j]>array[j+1]) { t=array[j]; array[j]=array[j+1]; array[j+1]=t; } } } printf("排序后:"); for (i=0; i<10; i++) { printf("%d",array[i]); } printf("\n"); return 0; }
3.希尔排序
#include <stdio.h> #include "string.h" void text(int array[],int n1); int main(int argc, const char * argv[]) { int array[]={9,2,6,4,5,8,0,7,3,1}; int n1; n1=sizeof(array)/sizeof(int); printf("请输入排序前的数据:"); for (int i=0; i<n1; i++) { printf("%d",array[i]); } printf("\n"); printf("排序后的数据:"); for (int i=0; i<n1; i++) { text(array,n1); printf("%d",array[i]); } printf("\n"); return 0; } void text(int array[],int n1){ int i,j,x; int d=n1/2; while (d>=1) { for (i=d; i<=n1; i++) { x=array[i];//记录i i++数值 j=i-d;//j是数组下标i对应数组下标值 while (j>=0&&array[j]>x) { array[j+d]=array[j]; j=j-d; } array[j+d]=x;//array[j]>x不成立就替换值 } d/=2; } }
相关文章推荐
- #编码风格#C++ Programming Style Guidelines
- VC++开发中遇到的一些问题整理
- 怎样从一个DLL中导出一个C++类
- C++格式化输出
- C/C++ vector详解
- 浅析C++标准库元组(tuple)源码
- (C/C++学习笔记)Copy构造函数应用场景
- C++ 头文件重复包含
- C/C++获取当前系统时间
- C语言基础、技巧_自总结版
- C++ Hello World
- C语言的关系运算符
- 链表排序(C语言)选择排序
- C++ Primer Plus第六版 第九章 编程练习答案
- C/C++知识要点4——printf函数以及cout的计算顺序
- c++学习笔记1
- c++ list iterator not incrementable
- C/C++知识要点3——类成员函数的重载、覆盖和隐藏的区别
- C++中的string类的用法小结
- qdbuscpp2xml工具用法中输入和输入