阅读背景:

排序算法小总结

来源:互联网 
/*************************
几种常见的排序算法,
1,冒泡排序
2,插入排序
3,选择排序
4,快速排序

*************************/
#include "stdio.h"
void swap(int* a,int* b)
{
	*a ^= *b;
	*b ^= *a;
	*a ^= *b;
}
//冒泡排序,注意j 从1开始到n-i;
void maopao_sort(int s[],int n)
{
	int i,j,temp;
	for(i =0 ;i< n;i++)
	{
		for(j =1;j<n-i;j++)
		{
			if(s[j-1] >s[j])
			{
				temp = s[j-1];
				s[j-1] = s[j];
				s[j] = temp;
			
			}
		}
	}

}
//插入排序
//从第一个数开始,看看到它前面的人有没有人不按高矮顺序排队,如果有就a[j],a[j+1],换下,直到成有序区。
void insert_sort(int a[],int n)
{
	int i,j;
	for( i= 0;i<n;i++)
	{
		for(j=i-1;j>=0&&a[j]>a[j+1]; j--)
		{
			swap(&a[j],&a[j+1]);
		}
	
	}

}
//选择排序 每次从i+1到n,选一个比a[i]小的数,然后交换,这样就最小的数在最前面了,
//意思就是每次把一个最小的小朋友放到前面,这样就自然排好了
void choose_sort(int a[] ,int n)
{
	int i,j,nMinIndex;
	for(i =0;i<n;i++)
	{
		nMinIndex = i;
		for(j =i+1;j<n;j++)
		{
			if(a[j]<a[nMinIndex])
				nMinIndex = j;
			swap(&a[i],&a[nMinIndex]);
		}
	}

}
//快速排序
void quick_sort(int s[], int l, int r)
{
    if (l < r)
    {
		//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
        int i = l, j = r, x = s[l];
        while (i < j)
        {
            while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
				j--;  
            if(i < j) 
				s[i++] = s[j];
			
            while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
				i++;  
            if(i < j) 
				s[j--] = s[i];
        }
        s[i] = x;
        quick_sort(s, l, i - 1); // 递归调用 
        quick_sort(s, i + 1, r);
    }
}
void print(int a[])
{
	int i;
	for(i = 0;i< 10;i++)
	{
		printf("%d ",a[i]);

	}
}
int main()
{
	int a[10] ={9,6,5,3,2,1,78,10,7,44};
	//quick_sort(a,0,9);
	//insert_sort(a,10);
	choose_sort(a,10);
	print(a);
	return 0;
}/*************************
几种常见的排序算法,
1,冒泡排序
2,



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: