常见排序算法
来源:互联网 发布:防鼠公司知乎 编辑:程序博客网 时间:2024/06/03 03:11
1、冒泡排序
#include<stdio.h> void main(){ int i,j;int s[10]={10,2,34,24,15,89,100,1,50,90};for( i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序前for(i=0;i<10;i++){for(j=0;j<9;j++){if(s[i]<s[j]){ int temp = s[i]; s[i] = s[j]; s[j] = temp;}}}for(i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序后 }2、直接插入排序
#include<stdio.h> void main(){ int i,j,temp;int s[10]={10,2,34,24,15,89,100,1,50,90};for( i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序前for(i=0;i<10;i++){temp = s[i]; //当前操作元素for(j=i-1;j>=-1&&s[j]>temp;j--){s[j+1] = s[j];s[j] = temp;}}for(i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序后 }3、希尔排序
#include<stdio.h> void main(){ int i,j,temp,gap;int s[10]={10,2,34,24,15,89,100,1,50,90};for( i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序前for(gap=10/2;gap>0;gap/=2){ //gap表示步长,每次减半,直到减到1for(i=gap;i<10;i++){//定位到每一个元素 for(j=i-gap;(j>=0)&&(s[j]>s[j+gap]);j-=gap)//比较相距gap远的两个元素的大小,根据排序方向决定如何调换 {temp = s[j];s[j] = s[j+gap];v[j+gap] = temp;}}}for(i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序后 }
4、快速排序
/*先找到第一个数--10,把它作为中间值,也就是说,要把10放在一个位置,使得它左边的值比它小,右边的值比它大。这样一个数组的排序就变成了两个小数组的排序--10左边的数组和10右边的数组,而这两个数组继续用同样的方式继续下去,一直到顺序完全正确。*/#include<stdio.h>void quicksort(int a[],int left,int right){ int i,j,temp; i=left; j=right; temp=a[left]; if(left>right) return; while(i!=j) { while(a[j]>=temp&&j>i)//发现左边有大于temp的数,则交换 j--; if(j>i) a[i++]=a[j]; while(a[i]<=temp&&j>i)//发现右边有小于temp的数,则交换 i++; if(j>i) a[j--]=a[i]; } a[i]=temp; quicksort(a,left,i-1); quicksort(a,i+1,right);} void main(){ int i;int s[10]={10,2,34,24,15,89,100,1,50,90};for( i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序前quicksort(s,0,9);for(i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序后 }5、选择排序
#include<stdio.h> void main(){ int i,j,min;int s[10]={10,2,34,24,15,89,100,1,50,90};for( i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序前for(i=0;i<10;i++){min=i;for(j=i+1;j<10;j++){ // 从j往前的数据都是排好的,所以从j开始往下找剩下的元素中最小的if(s[min]>s[j]){ //把剩下元素中最小的那个放到A[i]中 int temp = s[i];s[i] = s[j];s[j] = temp;}}}for(i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序后 }6、二分插入排序
#include <stdio.h>void HalfInsertSort(int a[], int len){ int i, j,temp; int low, high, mid; for (i=1; i<len; i++) { temp = a[i];// 保存但前元素 low = 0; high = i-1; while (low <= high) //在a[low...high]中折半查找有序插入的位置 { mid = (low + high) / 2; // 找到中间元素 if(a[mid] > temp){ // 如果中间元素比但前元素大,当前元素要插入到中间元素的左侧 high = mid-1; }else{ // 如果中间元素比当前元素小,但前元素要插入到中间元素的右侧 low = mid+1; } } // 找到当前元素的位置,在low和high之间 for (j=i-1; j>high; j--)// 元素后移 a[j+1] = a[j]; a[high+1] = temp;// 插入 }} void main(){ int i;int s[10]={10,2,34,24,15,89,100,1,50,90};for( i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序前HalfInsertSort(s,10);for(i=0;i<10;i++)printf("%d ",s[i]);printf("\n");//输出排序后 }
0 0
- 常见的排序算法
- 常见排序算法
- 常见排序算法代码
- 常见排序算法
- 常见排序算法总结
- 常见排序算法
- 常见排序算法学习
- 常见排序算法总结
- 常见的排序算法
- 常见排序算法分析
- 常见排序算法总结
- 常见排序算法
- 常见排序算法
- 常见排序算法介绍
- 常见排序算法小结
- 常见排序算法总结
- 常见经典排序算法
- 常见排序算法
- map基础操作
- Task Flow使用指南之八:Transaction(2)
- android audio
- io流
- Android Fragment应用实战,使用碎片向ActivityGroup说再见(转)
- 常见排序算法
- Mysql 按拼音排序
- Task Flow使用指南之八:Transaction(3)
- systemverilog数据类型
- POJ 1320Street Numbers(佩尔方程定理)
- Task Flow使用指南之八:Transaction(4)
- java处理事务
- 在虚拟机下安装ubuntu 10.04 64bit,并修改root用户密码
- How many ways??