排序整理
来源:互联网 发布:中国ip地址和端口 编辑:程序博客网 时间:2024/06/03 23:48
大三了,马上就要找实习和工作了,闲来无事,复习了一下基本排序,现将整理的东西发布一下
序,现将整理的排序发布出来
#include "stdio.h"#include <iostream>using namespace std;#define MAXSIZE 100typedef struct{int r[MAXSIZE];int length;}SqList;//交换函数void swap_(SqList *L,int i,int j){int temp = L->r[i];L->r[i]=L->r[j];L->r[j]=temp;}//输出函数void prin(SqList L){printf("排序后的数组为:");for (int j = 0;j<L.length;j++){printf("%d",L.r[j]);printf(" ");}printf("\n");}//初级冒泡排序void BubbleSort(SqList *L){int i,j;for(int i=0;i<L->length;i++){for(int j=i;j<L->length;j++){if (L->r[j]<L->r[i]){swap_(L,i,j);}}}}//正宗的冒泡排序void BubbleSort_new(SqList *L){int sum=0;for(int i=0;i<L->length;i++){for (int j=L->length-1;j>=i;j--){if (L->r[j]<L->r[j-1]){swap_(L,j,j-1);sum++;}}}printf("总过交换了:%d次",sum);}//改进的冒泡排序void BubbleSort_new2(SqList *L){int sum=0;bool flag = true;for(int i=0;i<L->length&&flag;i++){flag=false;for (int j=L->length-1;j>=i;j--){if (L->r[j]<L->r[j-1]){swap_(L,j,j-1);flag=true;sum++;}}}printf("总过交换了:%d次",sum);}//简单选择排序void SimpleSelectSort(SqList *L){int min,sum=0;for (int i =0;i<L->length;i++){min=i;for (int j =i+1;j<L->length;j++){if (L->r[j]<L->r[min]){min=j;}}if (min!=i){swap_(L,min,i);sum++;}}printf("总共交换了:%d次\n",sum);}//直接插入排序(注意要选择的数插入的坐标)void DirectInsertSort(SqList *L){int i,j;for (i=1;i<L->length;i++){if (L->r[i]<L->r[i-1]){int temp = L->r[i];for ( j=i-1;L->r[j]>temp&&j>=0;j--){L->r[j+1]=L->r[j];}L->r[j+1]=temp;}}}//希尔排序(将数据分组,使用直接插入排序)void shellSort(SqList *L){int i,j,step;for(step=L->length/2;step>0;step = step/2)//step分组{for(i=0;i<step;i++) //i表示偏移量{for (j=i+step;j<L->length;j+=step){if (L->r[j]<L->r[j-step]){int temp = L->r[j];int k;for (k = j-step;k>=0&&temp<L->r[k];k=k-step){L->r[k+step]=L->r[k];}L->r[k+step]=temp;}} }}}//堆排序(对简单选择排序的改进)//首先建立小顶堆(初始条件下,所有的叶子节点都是小顶堆,我们只需要针对与N/2-0进行堆的调整)//调整小顶堆的函数,将指定节点向下移动//从节点I开始,n为总结点void MinLeapAdjust(SqList *L,int i,int n){int temp = L->r[i];int j = 2*i+1; //j表示i节点的子节点for (;j<n;){if (j+1<n&&L->r[j]>L->r[j+1]){++j; //找出i节点的子节点中的最小的一个}if (temp<=L->r[j]){break; //父节点小于子节点,无需调整}L->r[i]=L->r[j]; //父节点大于子节点i=j;j=2*i+1;}L->r[i]=temp;}//建立小顶堆函数void createMinLeap(SqList *L){for (int i=L->length/2-1;i>=0;i--){MinLeapAdjust(L,i,L->length);}}//小顶堆排序函数void MinHeapSort(SqList *L){for (int m=L->length-1;m>=0;m--){swap_(L,m,0);MinLeapAdjust(L,0,m);}}//归并排序//归并排序是将数据分组为一个个的元素,然后进行合并,最后达到整体有序void mergeArray(int a[],int first,int mid,int last,int temp[]){int i= first,j=mid+1;int m=mid,n=last;int k=0;while(i<=m&&j<=n){if (a[i]<=a[j]){temp[k++]=a[i++];}elsetemp[k++]=a[j++];}while (i<=m){temp[k++]=a[i++];}while (j<=n){temp[k++]=a[j++];}for (int l=0;l<k;l++){a[first+l]=temp[l];}}void mergesort(int a[],int first,int last,int temp[]){if(first<last){int mid = (first+last)/2;mergesort(a,first,mid,temp); //左边递归有序mergesort(a,mid+1,last,temp);//右边递归有序mergeArray(a,first,mid,last,temp);//合并左右两边}}void MergeSort(int a[],int n){int *p = new int[n]; if (p == NULL) return ;mergesort(a, 0, n - 1, p); delete[] p;return ;}//快速排序int partition(int a[],int low,int high)//返回调整后的基数的位置{int i=low,j=high;int flag=a[i]; //分组的第一个是基数值while(i<j){while(i<j&&a[j]>flag) //从右往左遍历找到第一个大于基数的数j--;if (i<j){a[i]=a[j];i++;}while (i<j&&a[i]<flag)//从左往右遍历找到第一个小于基数的值i++;if (i<j){a[j]=a[i];j--;}}a[i]=flag;return i;} void quickSort(int a[],int low,int high) { int pivot; if (low<high) //递归出口条件 { pivot=partition(a,low,high); //第一次排序算出基数值,然后分左右两边排序 quickSort(a,low,pivot-1); quickSort(a,pivot+1,high); } } int main(){int arr[21]={4,3,5,7,2,4,1,8,454,4,51,2,5,45,1425,45,45,15,45,41512,45};int i=0;/*SqList sq ;for(i=0;i<23;i++){sq.r[i]=arr[i];}sq.length=i;*///初级冒泡排序//BubbleSort(&sq);//正宗冒泡排序//BubbleSort_new(&sq);//改进冒泡排序//BubbleSort_new2(&sq);//SimpleSelectSort(&sq);//DirectInsertSort(&sq);//shellSort(&sq);//createMinLeap(&sq);//MinHeapSort(&sq);//MergeSort(arr,8);quickSort(arr,0,20);for(i=0;i<21;i++)printf("%d ",arr[i]);return 0;}
序,现将整理的排序发布出来
0 0
- 排序整理
- 排序整理
- 排序整理
- 排序整理
- 排序整理
- 排序整理
- 排序算法整理
- 排序算法整理
- 排序算法整理
- 整理几个排序算法
- 排序模板(整理)
- 排序算法整理
- 排序算法整理
- java排序算法整理
- 外部排序算法整理
- 各种排序算法整理
- 排序算法整理
- 常见排序算法整理
- 机器学习笔记- 贝叶斯学习(3)
- linux学习--文件系统
- [个人向]3月的尾巴——阶段性小结
- 蓝桥杯之最大最小公倍数
- 同步和异步回调
- 排序整理
- 位域
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- Makefile经典教程(掌握这些足够)
- 感悟_电商技术服务
- MD5介绍及相关应用
- Java中,一个接口可以extends多个接口
- android的ExpanableListView的一点实用小经验
- JSP的一些问题及解决办法