编程语言
首页 > 编程语言> > 排序算法

排序算法

作者:互联网

排序算法

1.冒泡排序

void Bubble_sort(ElementType A[],int n){
    for(i=0;i<n-1;i++){
        flag=false;
        for(j=n-1;j>=i;j--){
            if(A[j-1]>A[j]){
                swap(A[j-1],A[j]);
                flag=true;
            }
        }
        if(flag==false)return;//若本趟没有发生交换则表已经有序;
    }
}
//时间复杂度:最好O(n),最坏:O(n^2)  
//空间复杂度: O(1)
//稳定性:稳定

2.插入排序

void Insert_sort(ElementType A[],int n){
    int i,j,tmp;
	for(i=1;i<n;i++){
		tmp=A[i];
		j=i-1;
		while(j>=0&&A[j]>tmp){
			A[j+1]=A[j];
			j--;
		}
		A[j+1]=tmp;
	}
}
//时间复杂度:最好O(n),最坏O(n^2)
//空间复杂度:O(1)
//稳定性:稳定

3.希尔排序

void ShellSort(ElementType A[],int n){
    for(dk=n/2;dk>=1;dk/=2){
        for(i=dk+1;i<=n;++i){
            if(A[i]<A[i-dk]){
                A[0]=A[i];
                for(j=i-dk;j>0&&A[0]<A[j];j-=dk)
                    A[j+dk]=A[j];
            }
        }
    }
}
//时间复杂度:平均:O(n^1.3) 最坏:O(n^2)
//空间复杂度:O(1)
//稳定性:不稳定

4.堆排序

平均比较次数:2NlogN-O(NloglogN)

时间复杂度:O(NlogN)

空间复杂度:O(1)

稳定性:不稳定

5.2路归并排序

空间复杂度:O(N)

时间复杂度:O(NlogN)

稳定性:稳定

6.基数排序

时间复杂度:

空间复杂度

稳定性:

7.快速排序(很重要)

实际应用中最好的算法,平均性能最好

时间复杂度:O(NlogN) 最坏:O(N^2)

空间复杂度:O()

稳定性:不稳定

void qsort(int *arr,int begin,int end){
    if(begin<end){
        int temp=arr[begin],i=begin,j=end;
        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;//将第一个数放在最终位置
        qsort(arr,begin,i-1);
        qsort(arr,i+1,end);
    }
}

8.总结

image-20210706002511112

标签:dk,int,void,稳定性,算法,排序,复杂度
来源: https://www.cnblogs.com/xjb714/p/16120239.html