排序演算法--插入排序實現從小到大排列(使用函數和指針)

2020-08-12 20:50:50

插入排序的時間複雜度最低爲O(N),最高爲O(N^2)

//插入排序(工作可能用到)實現從小到大排序 
#include<stdio.h>
void swap(int *a,int *b){
	int temp;
	temp=*a;
	*a=*b;
	*b=temp;
}
int main(){
	int n,i,j;
	while(~scanf("%d",&n)){
		int a[n];
		for(i=0;i<n;i++){
			scanf("%d",&a[i]);
		} 
		//思路:想象撲克牌已經排好了順序,現在末尾來了一張新的撲克牌,與前面的牌比較後最終放到合適的位置 
		for(i=1;i<n;i++){//這裏的i可以理解爲末尾新的撲克牌 
			for(j=i-1;j>=0&&a[j]>a[j+1];j--){//若末尾撲克牌i(j+1)等於1,則前面的j=0已經排好了順序,比較j+1和j的大小,如果j+1<j,則交換較小的數j+1到前面去 
				swap(&a[j],&a[j+1]);
			}
		}
		for(i=0;i<n;i++){
			printf("%d ",a[i]);
		}
		printf("\n");
	}
} 

執行結果:
在这里插入图片描述