11---------几种简单排序算法
来源:互联网 发布:电信内蒙古大数据 编辑:程序博客网 时间:2024/06/01 14:18
- 链表的排序(简单插入排序)
- 冒泡排序
- 双端冒泡排序
- 插入排序
- 简单选择排序
- 快速排序
- 堆排序
#include<stdio.h>/** 链表的排序(简单插入排序)* 冒泡排序* 双端冒泡排序* 插入排序* 简单选择排序* 快速排序* 堆排序*/typedef struct Node{ struct Node * next; int data;}Node;//链表的排序void TraveseNodes(Node * node){ Node * p,*q,*s; if(node ->next != NULL){ p = node->next->next; node ->next->next = NULL; //先断开链表 while(p){ q = node; while(q){ if(p->data > q->next->data){ //在前半部分表中找到第一个大于该结点的结点 break; } q = q->next; } s = p->next; p->next = q->next; q->next = p; p = s; } }}//冒泡排序void bubbleSort(int arr[],int n){ int i,j; int flag = 1; int temp; for(i=n-1;i>=1&&flag;i++){ flag = 0; for(j=0;j<i;j++){ if(arr[j]>arr[j+1]){ temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; flag = 1; } } }}void swap(int arr[],int a,int b){ int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp;}//双端冒泡排序void doubleBubbleSort(int arr[],int n){ int i,j; int flag = 1; int left=0,right=n-1; while(flag){ flag = 0; for(i=left;i<=right;i++,right--){ if(arr[i]>arr[i+1]){ swap(arr,i,i+1); flag = 1; } } for(j=right;j>=left;j--,left++){ if(arr[j-1]>arr[j]){ swap(arr,j,j-1); flag = 1; } } }}//插入排序void insertSort(int arr[],int n){ int i,j; int temp; for(i=1;i<n;i++){ temp = arr[i]; for(j=i-1;j>=0&&temp<arr[j];j--){ arr[j+1] = arr[j]; } arr[j+1] = temp; }}//简单选择排序void selectSort(int arr[],int n){ int i,j; for(i=0;i<n-1;i++){ for(j=i+1;j<n;j++){ if(arr[i] < arr[j]){ swap(arr,i,j); } } }}//快速排序void quickSort(int arr[],int left,int right){ int i=left,j=right; int temp; if(left < right){ temp = arr[left]; while(i<j){ while(i<j&&arr[j]>temp) j--; if(i<j){ arr[i] = arr[j]; i++; } while(i<j&&arr[i]<temp) i++; if(i<j){ arr[j] = arr[i]; j--; } } arr[i] = temp; quickSort(arr,left,i-1); quickSort(arr,i+1,right); }}//调整堆void shift(int arr[],int low,int high){ int temp = arr[low]; int i,j=low; for(i=low*2;i<high;i*=2){ if(arr[i+1] > arr[i]) i++; if(temp<arr[i]){ arr[j] = arr[i]; j = i; }else{ break; //如果temp本身比左右孩子的值都大的话,那么就跳出循环 } } arr[j] = temp;}//注意结点下标从1开始,否则就要修改上面二叉树调整算法void heapSort(int arr[],int n){ //下标范围为1-n 实际上数组大小为n+1 int i; for(i=n/2;i>=1;i--){ shift(arr,i,n); } for(i=n;i>=2;i--){ swap(arr,n,1); shift(arr,1,i-1); }}int main(){ return 0;}
阅读全文
0 0
- 11---------几种简单排序算法
- 几种简单排序算法
- 几种简单排序算法
- 几种排序算法java简单实现
- 几种简单的排序算法
- 几种简单的排序算法
- 几种简单的排序算法
- 简单的几种排序算法源码
- 几种简单的排序算法
- 几种简单的排序算法
- 几种排序算法的简单总结
- 几种常见简单排序算法
- JAVA 中的几种简单排序算法
- 简单介绍几种排序算法
- 几种简单的排序算法
- 几种简单的排序算法
- 几种简单的排序算法
- 几种简单排序算法详解
- sts maven 配置
- 公司利润
- sql-server-2017-integration-services-cookbook.pdf 英文原版 免费下载
- C语言中的操作符和表达式
- HTML面试真题
- 11---------几种简单排序算法
- Ubuntu 16.04 + caffe + cuda Installation Mannual
- 吴恩达深度学习1-4课后作业1 Building your Deep Neural Network: Step by Step
- bootstrap table 数据行合并
- 高并发Oracle数据库系统的架构与设计.pdf 免费下载
- tensorboard使用问题
- JAVA反射(一):获取Class对象
- c/c++ json对象操作
- 【BZOJ1096】仓库建设