zoukankan      html  css  js  c++  java
  • 排序算法

    简单选择排序 

    #include <iostream>
    using namespace std;
    
    void swap(int &a,int &b)
    {
    	int temp = a;
    	a=b ; b=temp;
    }
    void choiceSort(int A[],int n)
    {
    	for(int i=0;i<n-1;++i)
    	{
    		
    		int min_index= i;
    		for(int j=i;j<n;++j)
    		{
    			if(A[j]<A[min_index]) min_index=j;
    		}
    		swap(A[i],A[min_index]);
    	}
    }
    
    int main(int argc, char *argv[])
    {
    		int A[10]={
    		99,0,2,15,88,34,10,4,56,11
    	};
    	choiceSort(A,10);
    	for(int i=0;i<10;++i)
    	{
    		cout<<A[i]<<" ";
    	}
    	cout<<endl;
    	return 0;
    }
    
    
    

    冒泡排序 

    插入排序

    双向冒泡

    package com.google.app;
    
    public class Animal {
    
    	public static void bubble_sort(int[] A){
    		
    		for(int i=0;i<A.length-1;i++){
    			for(int j=0;j<A.length-i-1 ; ++j){
    				if(A[j]>A[j+1]){
    					int temp = A[j];
    					A[j]=A[j+1];
    					A[j+1]=temp;
    				}
    			}
    		}
    	}
    	public static void dbubble_sort(int[] A){
    		
    		for(int i=0;i<A.length-1;i++){
    			for(int j=0;j<A.length-i-1; ++j){
    				if(A[j]>A[j+1]){
    					int temp = A[j];
    					A[j]=A[j+1];
    					A[j+1]=temp;
    				}
    				if(A[A.length-i-j-1]<A[A.length-i-j-2]){
    					int temp = A[A.length-i-j-1];
    					A[A.length-i-j-1] = A[A.length-i-j-2];
    					A[A.length-i-j-2] = temp;
    				}
    				
    			}
    		}
    	}
    	public static void insert_sort(int[] A){
    		int j; 
    		int temp;
    		for(int i=1;i<A.length;++i){
    			j=i-1;
    			temp=A[i];
    			while(j>=0 && A[j]>temp ){
    				A[j+1]=A[j];
    				j--;
    			}
    			A[j+1]=temp;
    		}
    	}
    	
    	public static void main(String[] args) {
    		int[] A={99,88,77,66,55,44,33,22,11};
    		dbubble_sort(A);
    		//insert_sort(A);
    		for (int i : A) {
    			System.out.print(i+" ");
    		}
    	}
    }
    
    快速排序

    int partion(int A[],int left,int right)
    {
    	int pivot = A[left];
    	while(left<right)
    	{
    		while(left < right && A[right]>=pivot) right--;
    		A[left]=A[right];
    		while(left < right && A[left]<=pivot) left++;
    		A[right]=A[left];
    	}
    	A[left] = pivot;
    	return left;
    }
    
    void quickSort(int A[],int left,int right)
    {
    	if(left < right) 
    	{
    		int pos = partion(A,left,right);
    		quickSort(A,left,pos-1);
    		quickSort(A,pos+1,right);
    	}
    }
    

    希尔排序

    #include <iostream>
    using namespace std;
    
    void ShellSort(int A[],int n)
    {
    	for(int dk = n/2;dk>=1;dk = dk/2)
    	{
    		for(int k=0;k<dk;k++)
    		{
    			for(int i=k+dk;i<n;i++)
    			{
    					int temp= A[i];
    					int j=i-dk;
    					while(j>=0 && A[j]>temp)
    					{
    						A[j+dk] = A[j];
    						j=j-dk;
    					}
    					A[j+dk] = temp;
    			}
    		}
    	}
    }
    
    int main(int argc, char *argv[])
    {
    	int A[10]={
    		99,0,2,15,88,34,10,4,56,11
    	};
    	ShellSort(A,10);
    	for(int i=0;i<10;++i)
    	{
    		cout<<A[i]<<" ";
    	}
    	cout<<endl;
    }
    
    
    
    
    
    
    
    
    

    折半插入 

    void BiInsertSort(int A[],int n)
    {
    	int low,high,mid;
    	int temp;
    	for(int i=1;i<n;i++)
    	{
    		low = 0;
    		high = i-1;
    		temp=A[i];
    		while(low<=high)
    		{
    			mid=(low+high)/2;
    			if(A[mid] == temp)
    			{
    				high=mid-1;
    				break;
    			}
    			else if(A[mid] < temp)
    			{
    				low = mid+1;
    			}else{
    				high = mid-1;
    			}
    		}
    		for(int j=i-1;j>=high+1;j--)
    		{
    			A[j+1]=A[j];
    		}
    		A[high+1]=temp;
    	}
    }
    
    void InsertSort(int A[],int n)
    {
    	for(int i=1;i<n;++i)
    	{
    		int j = i-1;
    		int temp = A[i];
    		while(j>=0 && A[j]>temp)
    		{
    			A[j+1] = A[j]; 
    			j--;
    		}
    		A[j+1]=temp;
    	} 
    }
    



  • 相关阅读:
    [BZOJ] 2276: [Poi2011]Temperature
    [Codevs] 5037 线段树练习4加强版
    [Codevs] 4919 线段树练习4
    [Codevs] 1082 线段树练习3
    [Codevs] 1080 线段树练习
    [Codevs] 1081 线段树练习 2 ----“分块!”
    1629: [Usaco2007 Demo]Cow Acrobats
    Kruskal || BZOJ 1601: [Usaco2008 Oct]灌水 || Luogu P1550 [USACO08OCT]打井Watering Hole
    SET || BZOJ 1588: [HNOI2002]营业额统计 || Luogu P2234 [HNOI2002]营业额统计
    线段树合并+并查集 || BZOJ 2733: [HNOI2012]永无乡 || Luogu P3224 [HNOI2012]永无乡
  • 原文地址:https://www.cnblogs.com/wuhayaoshenmeai/p/3361880.html
Copyright © 2011-2022 走看看