博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒泡、选择、插入排序
阅读量:4313 次
发布时间:2019-06-06

本文共 2907 字,大约阅读时间需要 9 分钟。

冒泡、选择、插入排序

1 #include
2 #include
3 #include
4 5 //数组元素的个数 6 #define SIZE 15 7 8 //初始化数组 9 void initArray(int *arr, int len); 10 11 //打印数组元素 12 void printArray(int *arr, int len); 13 14 //交换两个数 15 void swap(int *a, int *b); 16 17 //冒泡排序 18 void bubbleSort(int *arr, int len); 19 20 //选择排序 21 void selectSort(int *arr, int len); 22 //返回最大值元素的下标 23 int max_key(int *arr, int beg, int end); 24 25 //插入排序 26 void insertSort(int *arr, int len); 27 28 int main() 29 { 30 int arr[SIZE]; 31 initArray(arr,SIZE); 32 printArray(arr,SIZE); 33 // bubbleSort(arr,SIZE); 34 // selectSort(arr,SIZE); 35 insertSort(arr,SIZE); 36 printArray(arr,SIZE); 37 return 0; 38 } 39 40 void initArray(int *arr, int len) 41 { 42 int i; 43 //随机生成数组元素 44 for(i = 0; i < len; i++) 45 arr[i] = rand() % 1000; 46 } 47 48 void printArray(int *arr, int len) 49 { 50 int i; 51 for(i = 0; i < len; i++) 52 printf("%4d",*(arr+i)); 53 printf("\n"); 54 } 55 56 //通过位操作交换两个数 57 void swap(int *a, int *b) 58 { 59 *a ^= *b;//记录差异 60 *b ^= *a;//翻转 61 *a ^= *b;//翻转 62 } 63 64 //来回冒泡排序 65 void bubbleSort(int *arr, int len) 66 { 67 int index;//工作指针 68 int top;//记录右边排好序的第一个元素的下标 69 int bottom;//记录左边排好序的最后一个元素的下标 70 71 top = len; 72 bottom = -1; 73 74 while(bottom <= top) 75 { 76 //从左往右 77 for(index = bottom+1; index < top-1; index++) 78 if(arr[index] > arr[index+1]) 79 swap(&arr[index],&arr[index+1]); 80 top--; 81 //从右往左 82 for(index = top-1; index > bottom+1; index--) 83 if(arr[index] < arr[index-1]) 84 swap(&arr[index],&arr[index-1]); 85 bottom++; 86 } 87 } 88 //返回最大元素的下标 89 int max_key(int *arr, int beg, int end) 90 { 91 int i; 92 int largest = beg; 93 for(i = beg+1; i <= end; i++) 94 if(arr[i] > arr[largest]) 95 largest = i; 96 return largest; 97 } 98 //选择排序 99 void selectSort(int *arr, int len)100 {101 int i, max;102 for(i = len-1; i > 0; i--)103 {104 max = max_key(arr,0,i);105 swap(&arr[max],&arr[i]);106 }107 }108 109 //插入排序110 void insertSort(int *arr, int len)111 {112 int i;//工作指针113 int first_unsorted;//第一个未排序元素下标114 int current;//暂存待插入的元素115 116 for(first_unsorted = 1; first_unsorted < len; first_unsorted++)117 if(arr[first_unsorted] < arr[first_unsorted-1])118 {119 //暂存元素120 current = arr[first_unsorted];121 i = first_unsorted;122 do{123 arr[i] = arr[i-1];124 i--;125 }while(i > 0 && arr[i-1] > current);126 //插入元素127 arr[i] = current;128 }129 }

 

转载于:https://www.cnblogs.com/cpsmile/p/4423227.html

你可能感兴趣的文章
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>
Hive安装前扫盲之Derby和Metastore
查看>>
永久修改PATH环境变量的几种办法
查看>>
大数据学习之HDP SANDBOX开始学习
查看>>
Hive Beeline使用
查看>>
Centos6安装图形界面(hdp不需要,hdp直接从github上下载数据即可)
查看>>
CentOS7 中把yum源更换成163源
查看>>
关于yum Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx.
查看>>