C语言实现的排序代码模板

23 阅读1分钟

普通排序(适合n在2000以内的题目)

#include<stdio.h> 
int main(){
	int n,a[100];
	scanf("%d",&n); //输入要排序的数的个数 
	for(int i=0; i<n; i++)
		scanf("%d",&a[i]); //输入排序的数 
			
	for(int i=0; i<n; i++){ //排序(从小到大) 
		for(int j=0; j<n-1; j++){ //最后一个不用自己给自己比,所以是n-1 
			if(a[j]>a[j+1]){ 
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}
	
	for(int i=0; i<n; i++)
		printf("%d ",a[i]);
	return 0;
}

快速排序(适合n在50w以内排序,时间复杂度nlogn)

详细讲解

#include<bits/stdc++.h>
using namespace std;
//字符数组可以写成char* functionname(char a[]){ }
void QuickSort(int a[], int left, int right){
	if(left<right){
		int i=left, j=right, key=a[left];
		while(i<j){
			while(i<j && a[j]>key){
				j--;
			}
			if(i<j){ //a右半段数比key小 
				a[i++]=a[j];
			}
			while(i<j && a[i]<key){
				i++;
			}
			if(i<j){ //a左边的数比key大
				a[j--]=a[i]; 
			}
		}
		a[i]=key; //中枢元素,已定 
		QuickSort(a,left,i-1); //左半段继续排序 
		QuickSort(a,i+1,right); //右半段继续排序 
	} 
}
int main(){
	int a[100],n=0,b;
	while(cin>>b){ //输入数组元素 
		a[n++]=b;
		if(cin.get()=='\n') break;
	}
	QuickSort(a,0,n-1); //快排函数
	for(int i=0; i<n; i++){ //输出数组元素 
		cout<<a[i]<<" ";
	} 
	return 0;
}

冒泡排序

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a[100],n=0,b;
	while(cin>>b){ //输入数组元素 
		a[n++]=b;
		if(cin.get()=='\n') break;
	}
	for(int i=0; i<n-1; i++){ //排序趟数
		for(int j=0; j<n-i-1; j++){ //一个元素与其他排序 
			if(a[j]>a[j+1]){
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		} 
	} 
	for(int i=0; i<n; i++){ //输出数组元素(从小到大) 
		cout<<a[i]<<" ";
	} 
	return 0;
}


排序小结

  • 稳定的排序算法:基数排序、冒泡排序、直接插入排序、归并排序。

  • 时间复杂度为O(nlogn):快速排序、堆排序、归并排序。

  • 时间复杂度为O(n^2):直接插入排序、冒泡排序、简单选择排序。