数据结构之各排序算法

#include <stdio.h>


void bubble_sort(int arr[], int n);///稳定
void insert_sort(int arr[],int n);///稳定

void selection_sort(int arr[],int n);///不稳定
void quick_sort(int arr[],int start,int end);///不稳定

int main()
{
	int a[105];
	int n;
	scanf("%d",&n);

	int i;
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	//selection_sort(a,n);
	//bubble_sort(a,n);
	//quick_sort(a,0,n-1);
	insert_sort(a,n);
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}
	printf("
");
}

///选择排序,时间复杂度O(n^2),是不稳定的,如4 5 5 2 6
void selection_sort(int arr[],int n)
{
	int i;
	for(i=0;i<n-1;i++){
		int min = i;
		int j;
		for(j=i+1;j<n;j++){
			if(arr[min] > arr[j]){
				min = j;
			}
		}
		if(min != i){
			int tmp;
			tmp = arr[min];
			arr[min] = arr[i];
			arr[i] = tmp;
		}
	}
}

///冒泡排序,时间复杂度O(n^2),是稳定的
void bubble_sort(int arr[], int n)
{
    int i, j, temp;
    for (j = 0; j < n - 1; j++)
        for (i = 0; i < n - 1 - j; i++)
        {
            if(arr[i] < arr[i + 1])
            {
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
}

///快速排序,时间复杂度O(n*log(n)),是不稳定的
void swap(int arr[],int i,int j)
{
    int tmp;
    tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
}

void quick_sort(int arr[],int start,int end) ///end代表数组中最后一个元素的位置
{
    if(start >= end){
        return ;
    }
    int x;
    int i = start;
    int j = end;
    x = arr[start];

    while(i != j){
        while(i < j && arr[j] > x){
            j--;
        }
        swap(arr,i,j);

        while(i < j && arr[i] <= x){
            i++;
        }
        swap(arr,i,j);
    }

    quick_sort(arr,start,i-1);
    quick_sort(arr,i+1,end);
}

///插入排序,时间复杂度O(n^2),是稳定的
void insert_sort(int arr[],int n)
{
    int i=0;
    int tmp;
    for(i=1;i<n;i++){
        int j = i-1;
        tmp = arr[i];
        while(arr[j] > tmp && j >= 0){
            arr[j+1] = arr[j];
            j--;
        }
        arr[++j] = tmp;
    }
}

  

原文地址:https://www.cnblogs.com/ACPIE-liusiqi/p/9670039.html