算法-四種常見排序算法總結

一.冒泡排序

排序過程:

  • 比較相鄰的兩個數據,如果第二個數小,就交換位置。
  • 從前向後兩兩比較,一直到比較最後兩個數據。最終最大數被交換到最後的位置,這樣第一個最大數的位置就排好了。
  • 繼續重複上述過程,依次將第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);
}


其他排序沒有研究貼一下鏈接:排序算法總結

 

 

 

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