C语言的简单应用(五)上
2017-07-17 21:01
162 查看
第五天
今天更新一下期待已久的排序篇,排序算法是数据结构中很火的存在,面试官也超级青睐的地方。
排序(Sorting )是计算机程序设计中的重要操作,排序的基本操作有两种:1、比较两个关键字值的大小 2、根据比较的结果,移动记录的位置。
排序的相关术语
稳定排序与不稳定排序:假定待排序的序列中存在多个记录具有相同的键值,若经过排序,这些记录的相对次序仍然保持不变,则这种排序方法是稳定的;反之,则不稳定。
举个例子:排序前(1,2,3,4,3)排序后(1,2,3,3,4),3的相对次序保持不变,故为稳定排序。
内部排序:整个排序过程都在内存进行,不需要访问外部存储器的排序。
外部排序:待排序元素量较大,在排序过程中需对外部存储器进行访问的排序。(暂不讨论外部排序)
1、插入排序:直接插入排序、二分插入排序、希尔排序
直接插入排序(平均时间O(n²),稳定)
二分插入排序(平均时间O(n²),稳定)
希尔排序(平均时间O(nlgn)~O(n²),不稳定)
二、交换排序:冒泡排序、快速排序
冒泡排序(平均时间O(n²),稳定)
快速排序(平均时间O(nlgn),不稳定)
未完待续。。。。。
今天更新一下期待已久的排序篇,排序算法是数据结构中很火的存在,面试官也超级青睐的地方。
排序(Sorting )是计算机程序设计中的重要操作,排序的基本操作有两种:1、比较两个关键字值的大小 2、根据比较的结果,移动记录的位置。
排序的相关术语
稳定排序与不稳定排序:假定待排序的序列中存在多个记录具有相同的键值,若经过排序,这些记录的相对次序仍然保持不变,则这种排序方法是稳定的;反之,则不稳定。
举个例子:排序前(1,2,3,4,3)排序后(1,2,3,3,4),3的相对次序保持不变,故为稳定排序。
内部排序:整个排序过程都在内存进行,不需要访问外部存储器的排序。
外部排序:待排序元素量较大,在排序过程中需对外部存储器进行访问的排序。(暂不讨论外部排序)
1、插入排序:直接插入排序、二分插入排序、希尔排序
直接插入排序(平均时间O(n²),稳定)
#include<stdio.h> #define max 10 void insert(int a[],int length) { int i,j; for(i=2;i<=length;i++) { a[0]=a[i]; j=i-1; while(a[0]<a[j]) { a[j+1]=a[j]; j-=1; } a[j+1]=a[0]; } } int main() { int i,length,a[max]; printf("input the length:"); scanf("%d",&length); for(i=1;i<=length;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } insert(a,length); puts("the sort order:"); for(i=1;i<=length;i++) printf("%d ",a[i]); return 0; }
二分插入排序(平均时间O(n²),稳定)
#include<stdio.h> #define max 10 void bininsert(int a[],int length) { int i,j,low,mid,high; for(i=2;i<=length;i++) { int x=a[i]; low=1;high=i; while(low<=high) { mid=(low+high)/2; if(x>a[mid]) low=mid+1; else high =mid-1; } for(j=i-1;j>=low;j--) a[j+1]=a[j]; a[low]=x; } } int main() { int i,j,length,a[max]; printf("input the length:"); scanf("%d",&length); for(i=1;i<=length;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } bininsert(a,length); puts("the sort order:"); for(i=1;i<=length;i++) printf("%d ",a[i]); return 0; }
希尔排序(平均时间O(nlgn)~O(n²),不稳定)
#include<stdio.h> #define max 10 void shellinsert(int a[],int length,int d) { int i,j; for(i=1+d;i<=length;i++) if(a[i]<a[i-d]) { a[0]=a[i]; for(j=i-d;j>0&&a[0]<a[j];j-=d) a[j+d]=a[j]; a[j+d]=a[0]; } } void shellsort(int a[],int length,int d[],int n) { int i; for(i=0;i<=n-1;i++) shellinsert(a,length,d[i]); } int main() { int i,j,a[max]; int length,d[3]={5,3,1}; printf("input the length:"); scanf("%d",&length); for(i=1;i<=length;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } shellsort(a,length,d,3); printf("the shellsort order:"); for(i=1;i<=length;i++) printf("%d ",a[i]); return 0; }
二、交换排序:冒泡排序、快速排序
冒泡排序(平均时间O(n²),稳定)
#include<stdio.h> #define max 10 void bubblesort(int a[],int len) { int i,j,temp,mark; for(i=1;i<=len-1;i++) { mark=1; for(j=1;j<=len-i;j++) if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; mark=0; } if(mark) break; } } int main() { int i,len,a[max]; printf("input the len:");scanf("%d",&len); for(i=1;i<=len;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } bubblesort(a,len); puts("the bubblesort order:"); for(i=1;i<=len;i++) printf("%d ",a[i]); return 0; }
快速排序(平均时间O(nlgn),不稳定)
#include<stdio.h> #define max 10 int quicksort(int a[],int low,int high) { int temp=a[low]; while(low<high) { while(low<high&&a[high]>=temp) high--; if(low<high) { a[low]=a[high]; low++; } while(low<high&&a[low]<=temp) low++; if(low<high) { a[high]=a[low]; high--; } } a[low]=temp; return low; } void quick(int a[],int low,int high) { int pos; if(low<high) { pos=quicksort(a,low,high); quick(a,low,pos-1); quick(a,pos+1,high); } } int main() { int i,len,a[max]; printf("input the len:"); scanf("%d",&len); for(i=1;i<=len;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } quick(a,1,len); puts("the quicksort order:"); for(i=1;i<=len;i++) printf("%d ",a[i]); return 0; }
未完待续。。。。。
相关文章推荐
- C语言:两种简单的排序及其应用(选择排序和冒泡排序)
- 数据结构-C语言 栈的简单应用——行编辑程序
- c语言 双向循环链表的简单应用
- 【学习ios之路:C语言】①指针及其简单的应用
- 【C语言】实现一个简单SHELL应用
- gdb : C语言调试工具简单应用
- 3ff0 C语言实现一种简单的应用服务器内部数据结构的思路(二)
- 单链表的应用:用C语言实现简单的员工管理系统(新建、增、删、改、查、排序)
- 简单的指针应用 成绩表 c语言
- C语言的简单应用(一)
- C语言的简单应用(二)
- C语言对搜索的简单应用(迷宫问题
- C语言结构体简单应用范例
- C语言对深度搜索的简单应用(Oil Deposits
- 数据结构-C语言 栈的简单应用——括号匹配
- 【学习ios之路:C语言】函数及递归的简单应用
- C语言中移位、逻辑运算符的简单应用
- C语言二维数组的应用的简单举例
- C语言的简单应用(三)
- C语言的简单应用(四)