算法-四种常见排序算法总结

一.冒泡排序

排序过程:

  • 比较相邻的两个数据,如果第二个数小,就交换位置。
  • 从前向后两两比较,一直到比较最后两个数据。最终最大数被交换到最后的位置,这样第一个最大数的位置就排好了。
  • 继续重复上述过程,依次将第2.3...n-1个最大数排好位置。

 

 

/*************************************************************************
	> File Name: maopao.c
	> Author: bairutai
	> Mail: [email protected] 
	> Created Time: 2015年09月14日 星期一 09时28分07秒
 ************************************************************************/

#include<stdio.h>
main()
{
	int array[] = {
		8,2,4,5,7,9,1,10,0,3,6
	};
	int i,j,tmp;
	int len = sizeof(array)/4;
	for(i = 0; i < len; i++){
		for(j = 0; j < len -i-1; j++){
			if(array[j] > array[j+1]){
				tmp = array[j+1];
				array[j+1] = array[j];
				array[j] = tmp;
			}
		}
	}
	for(i = 0; i < len; i++){
		printf("array[%d] is %d \n", i, array[i]);
	}
}


二.选择排序

 

排序过程:

              在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
              第二次遍历n-2个数,找到最小的数值与第二个元素交换;
               。。。
              第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。

 

/*************************************************************************
	> File Name: xuanze.c
	> Author: bairutai
	> Mail: [email protected] 
	> Created Time: 2015年09月14日 星期一 11时53分24秒
 ************************************************************************/

#include<stdio.h>
main(){
	int array[] = {
		8,2,4,5,7,9,1,10,0,3,6
	};
	int len = sizeof(array)/sizeof(int);
	int i,j,tmp,min;
	for(i = 0; i < len; i++){
		min = i;
		for(j = i+1; j < len;j++){
			if(array[j]<array[min]){
				min = j;
			}
		}
		if(min != i){
			tmp = array[min];
			array[min] = array[i];
			array[i] = tmp;
		}
	}
	for(i = 0;i<len;i++){
		printf("array[%d] is %d\n", i,array[i]);
	}

}

 

三.插入排序

排序过程:

在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

 

/*************************************************************************
	> File Name: charu.c
	> Author: bairutai
	> Mail: [email protected] 
	> Created Time: 2015年09月14日 星期一 13时59分56秒
 ************************************************************************/

#include<stdio.h>
main()
{
	int array[] = {
		10,9,8,7,6,5,4,3,2,1,0
	};
	int len = sizeof(array)/sizeof(int);
	int tmp,i,j;
	for(i=0;i<len-1;i++){
		for(j=i+1;j>0;j--){
			if(array[j]<array[j-1]){
				tmp = array[j-1];
				array[j-1] = array[j];
				array[j] = tmp;
			}
			else
			{
				break;
			}
		}
	}

	for(i=0;i<len;i++){
		printf("array[%d] is %d\n",i,array[i]);
	}
}

 

四.快速排序

排序过程参考:排序过程理解

 

/*************************************************************************
	> File Name: kuaisu.c
	> Author: bairutai
	> Mail: [email protected] 
	> Created Time: 2015年09月14日 星期一 14时09分37秒
 ************************************************************************/

#include<stdio.h>
void Sort(int [],int, int);
main()
{
	int array[] = {
		10,9,8,7,6,5,4,3,2,1,0
	};
	int len = sizeof(array)/sizeof(int);
	Sort(array, 0, len-1);
	int i;
	for(i = 0;i<len;i++)
	{
		printf("array[%d] is %d\n", i, array[i]);
	}
}

void Sort(int array[], int begin,int end)
{
	if(end <= begin){
		return;
	}
	int i = begin;
	int j = end;
	int key = array[begin];
	while(i<j){
		while(i<j && array[j] >= key){
			j--;
		}
		if(i<j){
			array[i] = array[j];
			i++;
		}
		while(i<j && array[i] < key){
			i++;
		}
		if(i<j){
			array[j] = array[i];
			j--;
		}
	}
	array[i] = key;
	Sort(array,begin,i-1);
	Sort(array,i+1,end);
}


其他排序没有研究贴一下链接:排序算法总结

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章