排序方法之冒泡(鸡尾酒)、选择、插入(二分插入)、希尔排序
来源:互联网 发布:淘宝app怎么下载不了 编辑:程序博客网 时间:2024/06/06 01:17
#include <stdio.h>void swap(int *a, int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;}void print(int *a,int len){int i;for(i = 0;i < len;i++){printf("%4d",a[i]);}printf("\n");}int main()//冒泡排序{int a[] = {2,1,4,6,9,7,8,0,3,5};int len = sizeof(a) / sizeof(a[0]);int i,j;for(i = 0;i <len-1;i++){for(j = 0;j < len-i-1;j++){if(a[j] > a[j+1]){swap(a,j,j+1);}}}print(a,len);return 0;}int main()//冒泡排序之鸡尾酒排序法{int a[] = {2,1,4,6,9,7,8,0,3,5};int len = sizeof(a) / sizeof(a[0]);int left = 0;int right = len - 1;int i;while(left < right)//判断条件{for(i = left;i < right;i++)//从左到右最大数放在right位置{if(a[i] > a[i+1]){swap(a,i,i+1);}}right--;for(i = right;i > left;i--)//从右向左最小数放在left位置{if(a[i] < a[i-1]){swap(a,i,i-1);}}left++;}print(a,len);return 0;}int main()//选择排序{int a[] = {2,1,4,6,9,7,8,0,3,5};int len = sizeof(a) / sizeof(a[0]);int i,j;int min;for(i = 0;i < len;i++){min = i;for(j =i+1;j < len ;j++ ){if(a[min] > a[j]){min = j;}}if(min != i){swap(a,i,min);}}print(a,len) ;return 0;}int main()//插入排序{int a[] = {2,1,4,6,9,7,8,0,3,5};int len = sizeof(a) / sizeof(a[0]);int get;//保存待插入元素int i;int j;for(i = 1;i < len;i++){get = a[i];j = i - 1;//找到第一个比待插入元素小的元素,并进行移位while(j >= 0 && a[j] > get){a[j+1] = a[j];j--;}a[j+1] = get;}print(a,len);return 0;}int main()//插入排序之二分插入排序法{int a[10] = {2,1,4,6,9,7,8,0,3,5};int len = sizeof(a) / sizeof(a[0]);int i,j;int get;int left,right;for(i = 1;i < len;i++){get = a[i];left = 0; //左边界right = i - 1;//右边界 初始时,只有一个数,left和right指向同一个数while(left <= right) // 找插入位置:查找完后要插入的位置在下标为left的位置{int mid = (left + right) / 2;if( a[mid] > get) //判断插入位置{right = mid - 1; //插入左边,设定右边界}else{left = mid + 1; //插入右边,设定左边界}}for(j = i - 1;j >= left;j--)//进行移位,将left开始右边的所有元素都右移一位{a[j+1] = a[j];}a[left] = get;}print(a,len);return 0;}int main() //希尔排序{int a[] = {2,1,4,6,9,7,8,0,3,5};int len = sizeof(a) / sizeof(a[0]);int i,j;int get;int d = len; //d代表每一次的步长do{d = d/3 +1;for(i = d;i < len;i++){get = a[i];j = i - 1;while(j >= 0 && a[j] > get){a[j+1] = a[j];j--;}a[j+1] = get;}}while(d > 1);print(a,len);return 0;}
阅读全文
1 0
- 排序方法之冒泡(鸡尾酒)、选择、插入(二分插入)、希尔排序
- 插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序
- C语言之各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- C语言之各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- 二分,插入,选择,冒泡,希尔排序
- 数组排序(冒泡,选择,插入,希尔)
- 排序算法(选择、希尔、二分插入、冒泡、直接插入、快速排序)
- 常见排序方法(冒泡排序、选择排序、插入排序、希尔排序和快速排序)
- 排序(选择、希尔、二分插入)
- 内部排序之插入排序(直接插入排序,二分插入排序,希尔插入排序)
- js实现排序算法(冒泡、选择、插入、二分插入、快速、希尔)
- js实现排序算法(冒泡、选择、插入、二分插入、快速、希尔)
- 数据结构各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- 排序之冒泡,选择,插入,希尔
- 冒泡--选择--插入--希尔排序
- 基本排序算法(选择、插入、冒泡)和希尔排序
- 直接插入排序、二分插入排序、希尔排序、冒泡排序与简单选择排序
- 8-3
- 【PAT】【Advanced Level】1040. Longest Symmetric String (25)
- 机器学习实验—文档建模
- 琐记2: ++i 的打印顺序问题
- 【技能库】--jvm crash 如何开启 core dump 如何分析(280)
- 排序方法之冒泡(鸡尾酒)、选择、插入(二分插入)、希尔排序
- 扩展gcd
- 时间
- PIC单片机中断服务程序
- OpenCv 如何对图像的像素进行操作(注意多通道图像在内存中的存储方式!!)
- Linux网络编程之socket函数
- 数组
- 笔记15--js基础知识--字符串
- final关键字