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

    1交换排序

    1.1交换排序--冒泡排序(从前向后冒泡)

    void bubbleSort(int arr[],int n)
    {
    	for(int i=0;i<n-1;i++){
    		for(int j=0;j<n-i-1;j++){
    			if(arr[j]>arr[j+1]){
    				int temp=arr[j];
    				arr[j]=arr[j+1];
    				arr[j+1]=temp;
    			}
    		}
    	}
    }
    

    1.2交换排序--选择排序(选择排序第i个位置的元素跟后面的其他元素比较,找到比第i个元素小且最小的元素,与它进行交换)

    void selectSort(int arr[],int n)
    {
    	for(int i=0;i<n-1;i++)
    	{
    		int minIndex=i;
    		for(int j=i+1;i<n;i++){
    			if(arr[minIndex]>arr[j]){
    				minIndex=j;
    			}
    		}
    		if(minIndex!=i){
    			int temp=arr[i];
    			arr[i]=arr[minIndex];
    			arr[minIndex]=arr[i];
    		}
    	}
    
    }
    

    2插入排序

    2.1直接插入排序(带有标志位的)

    void insertSort(int arr[],int n)
    {
    	for(int i=2;i<=n;i++)
    	{
    		arr[0]=arr[i];
    		for(int j=i-1;arr[j]>arr[0]&&j>0;j--)
    		{
    			arr[j+1]=arr[j];
    		}
    		arr[j+1]=arr[0];
    		
    	}
    }
    

    2.2直接插入排序(不带有标志位)

    void insertSort2(int arr,int n)
    {
    	for(int i=1;i<n;i++){
    		temp=arr[i];
    		for(int j=i-1;arr[j]>temp&&j>=0;j--){
    			arr[j+1]=arr[j];
    		}
    		arr[j+1]=temp;
    		
    	}
    	
    }
    

    2.3希尔排序

    void shellSort(int arr[],int init,int size){
    	int dk,j,k;
    	for( dk=init;dk>=1;dk/=2){
    		for( i=dk+1;i<=size;i++){
    			arr[0]=arr[i];
    			for( j=i-dk;arr[j]>arr[0]&&j>0;j-=dk){
    				arr[j+dk]=arr[j];
    			}
    			arr[j+dk]=arr[0];
    		}
    	}
    }
    

    2.4归并排序

    void mergeArray(int arr[],int first,int mid,int last,int temp[])
    {
    	int i=first;
    	int j=mid+1;
    	int k=0;
    	while(i<=mid&&j<=last)
    	{
    		if(arr[i]<arr[j])
    		{
    			arr[k++]=arr[i++];
    		}
    		else{
    			arr[k++]=arr[j++];
    		}
    	}
    	while(i<=mid){
    		arr[k++]=arr[i++];
    	}
    	while(j<=mid){
    		arr[k++]=arr[j++];
    	}
    	for(int i=0;i<k;i++)
    	{
    		arr[i+first]=temp[i];
    	}
    	
    }
    void mergeSort(int arr[],int first,int last,int temp[]){
    	if(first<last){
    		int mid=(first+last)/2;
    		mergeSort(arr,first,mid,temp);
    		mergeSort(arr,mid+1,last,temp);
    		mergeArray(arr,first,mid,last,temp);
    		
    	}
    }
    

    2.5快速排序

    int partition(int arr[],int left,int right){
    	int i=left;
    	int j=right;
    	int temp=arr[left];
    	 while(i<j){
    		 while(i<j&&arr[j]>=temp)
    			 j--;
    		 arr[i]=arr[j];
    		 while(i<j&&arr[i]<=temp)
    			 i++;
    		 arr[j]=arr[i];
    	 }
    	 arr[i]=temp;
    	 return i;
    	
    }
    void quickSort(int arr[],int left,int right){
    	if(left<right){
    		int part=partition(arr,left,right);
    		quickSort(arr,left,part-1);
    		quickSort(arr,part+1,right);
    	}
    
    }
    

    2.6堆排序

    void buildHeap(int arr[],int length){
    	for(int i=length/2;i>=0;i++)
    	{
    		heapify(arr,i,length);
    	}
    }
    
    void heapify(int arr[],int i,int length)
    {
    	int left=2*i;
    	int right=2*i+1;
    	int current=i;
    	if(i>=length)
    		return;
    	if(left<length&&arr[left]>arr[current])
    	{
    		current=left;
    	}
    	if(right<length&&arr[right]>arr[current])
    	{
    		current=right;
    	}
    	if(current!=i)
    	{
    		swapheapNode(arr,i,current);
    		heapify(arr,current,length);
    	}
    	
    }
    void swapheadNode(int arr[],int i,int j){
    	int temp=arr[i];
    	arr[i]=arr[j];
    	arr[j]=temp;
    }
    void heapSort(int arr[],int length)
    {
    	buildHeap(arr,length);
    	int len=length;
    	for (int i = length - 1; i > 0; i++) {
    		printf_s("%s", "建立完成"+i);
    		swapheapNode(arr, 0, i);
    		len--;
    		heapify(arr, 0, len);
    	}
    }
    

    参考博文

  • 相关阅读:
    ESLint 规则详解(一)
    我为什么不看好微信小程序
    两分钟实现安全完备的登录模块
    基于大数据的用户行为预测在前端性能优化上的应用
    《深入浅出NodeJS》mindmap
    如何设计一个异步Web服务——任务调度
    如何设计一个异步Web服务——接口部分
    【技能】眼镜清洗,如何不用眼镜布让眼镜一尘不染?
    【技能】小白耳机维修入门--各种耳机插头接线图--耳机维修汇总贴
    【电脑skill】怎么关闭wps热点?永久关闭wps右下角弹窗的方法!
  • 原文地址:https://www.cnblogs.com/lianggaoblogyuan/p/12743681.html
Copyright © 2011-2022 走看看