数据结构
Posted 徐王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构相关的知识,希望对你有一定的参考价值。
排序
#include<stdio.h> //default order is not descending order void init(int *a,int n){ //int i; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } } void InsertSort(int *a,int n){ //简单插入排序(稳定) for(int i=2;i<=n;i++){ if(a[i]<a[i-2]){ a[0]=a[i]; a[i]=a[i-1]; for(int j=i-2;a[0]>a[j];j--){ a[j+1]=a[j]; } a[j+1]=a[0]; } } } void BiInsertSort_book(int *a,int n){ //折半插入排序(稳定) for(int i=2;i<=n;i++){ a[0]=a[i]; int l=1,r=i-1; while(l<=r){ int mid=(l+r)/2; if(a[0]<a[mid])r=mid-1; else l=mid+1; } for(int j=i-1;j>=r+1;j--) a[j+1]=a[j]; a[r+1]=a[0]; } } void ShellInsert(int *a,int dk,int n){ for(int i=dk+1;i<=n;i++){ if(a[i]<a[i-dk]){ a[0]=a[i]; int j; for(j=i-dk;j>0&&a[0]<a[j];j-=dk){ a[j+dk]=a[j]; } a[j+dk]=a[0]; } } } void ShellSort(int *a,int n){ //希尔排序(缩小增量排序)(不稳定) int t,dlta[50]; int tmp=n-1; while((tmp>>=1)) t++; for(int k=0;k<=t;k++){ dlta[t-k]=tmp+; tmp<<=1; } for(int i=0;i<=t;i++){ ShellInsert(a,dlta[i],n); } } int binary_search_3(int a[], int n, int key) { //求最小的i,使得a[i] > key,若不存在,则返回-1 int m, l = 0, r = n - 1;//闭区间[0, n - 1] while (l < r) { m = l + ((r - l) >> 1);//向下取整 if (a[m] <= key) l = m + 1; else r = m; } if (a[r] > key) return r; return -1; } int BiSearch(int *a,int n,int x){ //二分查找,数据存在a[1]到a[n],找不到返回0 int l=1,r=n; while(l<=r){ int mid=(l+r)/2; if(a[mid]==x)return mid; if(x<a[mid])r=mid-1; else l=mid+1; } return 0; } void BubbleSort(int *a,int n){ //冒泡排序(稳定) for(int i=1;i<n;i++){ for(int j=i;j<n;j++){ if(a[j]>a[j+1]){ a[0]=a[j]; a[j]=a[j+1]; a[j+1]=a[0]; } } } } int Partition(int *a,int l,int r){ a[0]=a[l]; while(l<h){ while(l<r&&a[r]>=a[0])r--; a[l]=a[r]; while(l<r&&a[l]<=a[0])l++; a[r]=a[l]; } return l; } void QuickSort2(int *a,int l,int r){ //快速排序 if(l<h){ int pivot=Partition(a,l,r); QuickSort2(a,l,pivot-1); QuickSort2(a,pivot+1,r); } } void QuickSort(int *a,int n){ QuickSort2(a,1,n); } void SelectSort(int *a,int n){ //简单选择排序(不稳定) for(int i=1;i<n;i++){ a[0]=i; for(int j=i+1;j<=n;j++){ if(a[j]<a[a[0]]){ a[0]=j; } } if(a[0]!=i){ int tmp=a[0]; a[0]=a[i]; a[i]=a[tmp]; a[tmp]=a[i]; } } } void PileSort(int *a,int n){ //堆排序 } void MergeSort(int *a,int n){ //二路归并 } void RadixSort(int *a,int n){ //基数排序 } int main(){ int a[20],n; scanf("%d",&n); init(a,n); }
以上是关于数据结构的主要内容,如果未能解决你的问题,请参考以下文章
python 用于数据探索的Python代码片段(例如,在数据科学项目中)