IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 排序 -> 正文阅读

[数据结构与算法]排序

#include<bits/stdc++.h>
using namespace std;

int a[1000001],n;
int b[1000001],tmp[1000001];


int GetMax(int a[],int n)
{
?? ?int max=a[0];
?? ?for(int i=1;i<n;i++){
?? ??? ?if(a[i]>max) ? max = a[i];
?? ?}
?? ?return max;
}


void QuickSort(int q[], int l, int r)
{
?? ?if (l >= r) return;

?? ?int i = l - 1, j = r + 1, x = q[l + r >> 1];
?? ?while (i < j)
?? ?{
?? ? ? ?do i ++ ; while (q[i] < x);
?? ? ? ?do j -- ; while (q[j] > x);
??? ? ? if (i < j) swap(q[i], q[j]);
?? ?}
?? ?QuickSort(q, l, j), QuickSort(q, j + 1, r);
}

int ans;
void MergeSort(int q[],int l,int r)
{
?? ?if(l==r)return;
?? ?int i=l,mid=(l+r)/2,j=mid+1,k=l;
?? ?
?? ?MergeSort(q,l,mid);
?? ?MergeSort(q,mid+1,r);
?? ??? ?
?? ?while(i<=mid&&j<=r)
?? ?{
??? ? ? if(q[i]<=q[j]){
??? ? ? ??? ?tmp[k++]=q[i++];
??? ? ? }
??? ? ? else{
??? ? ? ??? ?ans=ans+j-k;
?? ? ? ??? ?tmp[k++]=q[j++];
?? ? ? ?}
?? ??? ?}
?? ?while(i<=mid) tmp[k++]=q[i++];
?? ?while(j<=r) tmp[k++]=q[j++];
?? ?for(int i=l;i<=r;i++)
? ??? ??? ?q[i]=tmp[i];
}

void MergeFindSort( int a[] , int n )
{
?? ?int low , high , mid ;
? ? int temp ;
? ? for ( int i=1 ; i<n ; i++ )
? ? {
? ? ? ? temp = a[i ];
? ? ? ? low = 0 ;
? ? ? ? high = i - 1 ;
? ? ? ? while ( low <= high )
? ? ? ? {
? ? ? ? ? ? mid = ( low + high ) / 2 ;
? ? ? ? ? ? if ( a[mid] > temp )
? ? ? ? ? ? ? ? high = mid - 1 ;
? ? ? ? ? ? else
? ? ? ? ? ? ? ? low = mid + 1 ;
? ? ? ? }
? ? ? ? for ( int j = i - 1 ; j > high ; j-- )
? ? ? ? ? ? a[j+1] = a[j] ;
? ? ? ? a [high+1] = temp ;
? ? }
}

void ShellSort(int arr[], int len)
{
?? ?int i, j, temp, jump=len>>1;
?? ?while (jump != 0)
?? ?{
?? ??? ?for (i = jump; i < len; i++)
?? ??? ?{
?? ??? ??? ?temp = arr[i];
?? ??? ??? ?j = i - jump;
?? ??? ??? ?while (j >= 0 && temp < arr[j])
?? ??? ??? ?{
?? ??? ??? ??? ?arr[j + jump] = arr[j];
?? ??? ??? ??? ?j=j-jump;
?? ??? ??? ?}
?? ??? ??? ?arr[j + jump] = temp;
?? ??? ?}
?? ??? ?jump/=2;;
?? ?}
}


void CountingSort(int a[],int n)
{
?? ?int m = GetMax(a,n);
?? ?int b[m+1]={0};
?? ?for(int j=0;j<n;j++) ? b[a[j]]++;
?? ?for(int i=0,k=0;i<=m||k<n;i++)
?? ?{
?? ??? ?while(b[i]>0){
?? ??? ??? ?a[k++] = i;
?? ??? ??? ?b[i]--;
?? ??? ?}
?? ?}?
}

void RadixSort(int*a,int length)
{
?? ?int max=a[0];
?? ?for(int i=1;i<length;i++)
?? ?{
?? ??? ?if(a[i]>max)
?? ??? ?{
?? ? ??? ??? ?max=a[i];
?? ??? ?}
?? ?}
?? ?int base=1;
?? ?int *b=(int*)malloc(sizeof(int)*length);
?? ?int i;
?? ?while(max/base>0)
?? ?{
?? ??? ?int t[10]={0};
?? ??? ?for(i=0;i<length;i++)
?? ??? ?{
? ?? ??? ??? ?t[a[i]/base%10]++;
?? ??? ?}
?? ??? ?for(i=1;i<10;i++)
?? ??? ?{
?? ??? ??? ?t[i]+=t[i-1];
?? ??? ?}
?? ??? ?for(i=length-1;i>=0;i--)
?? ??? ?{
?? ??? ??? ?b[t[a[i]/base%10]-1]=a[i];
?? ??? ??? ?t[a[i]/base%10]--;
?? ??? ?}
?? ??? ?for(i=0;i<length;i++)
?? ??? ?{
?? ??? ??? ?a[i]=b[i];
?? ??? ?}
?? ??? ?base=base*10;
?? ?}
}

void InsertSort(int* a, int n)
{
?? ?int i = 0;
?? ?for (i = 0; i < n - 1; i++)
?? ?{
?? ??? ?int end = i;
?? ??? ?int tmp = a[end + 1];
?? ??? ?while (end >= 0)
?? ??? ?{
?? ??? ??? ?if (tmp < a[end])
?? ??? ??? ?{
?? ??? ??? ??? ?a[end + 1] = a[end];
?? ??? ??? ??? ?end--;
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?a[end + 1] = tmp;
?? ?}
}

void BubbleSort(int a[],int n)
{
?? ?for(int i=0;i<n;i++)
?? ?{
?? ??? ?for(int j=0;j<n-i-1;j++)
?? ??? ?{
?? ??? ??? ?if(a[j]>a[j+1])
?? ??? ??? ?{
?? ??? ??? ??? ?int t=a[j];
?? ??? ??? ??? ?a[j]=a[j+1];
?? ??? ??? ??? ?a[j+1]=t;
?? ??? ??? ?}
?? ??? ?}
?? ?}
}

void SelectSort(int arry[], int len)
{ ? ? ?
?? ?int i;
? ? int j;
? ? for ( i = 0; i < len-1; i++)
? ? {
? ? ? ? int min = i;
? ? ? ? for (j = i + 1; j < len; j++)
?? ??? ?{
? ? ? ? ? ?if (arry[j] < arry[min])
? ? ? ? ? ? {
? ? ? ? ? ? ? ? min = j;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? int temp = arry[min];
? ? ? ? arry[min] = arry[i];
? ? ? ? arry[i] = temp;
? ? }
}

int main()
{
?? ?cin>>n;
?? ?for(int i=0;i<n;i++)
?? ??? ?cin>>a[i];
?? ??? ?
?? ?cout<<endl<<endl;?
?? ?
?? ?cout<<"数组a中有";
?? ?
?? ?MergeSort(a,0,n-1);
?? ?cout<<ans;
?? ?stable_sort(a,a+n);
?? ?
?? ?cout<<"队逆序对";
?? ?
?? ?cout<<endl<<endl;
?? ?
?? ?RadixSort(a,n);
?? ?
?? ?CountingSort(a,n);
?? ?
?? ?ShellSort(a,n);
?? ?
?? ?MergeFindSort(a,n);
?? ?
?? ?InsertSort(a,n);
?? ?
?? ?BubbleSort(a,n);
?? ?
?? ?SelectSort(a,n);
?? ?
?? ?

?? ?QuickSort(a,0,n-1);
?? ?sort(a,a+n);

?? ?for(int i=0;i<n;i++)
??? ? ? cout<<a[i]<<" ";
?? ?return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:51:10  更:2022-02-22 20:52:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:47:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码