一.冒泡排序
排序過程:
- 比較相鄰的兩個數據,如果第二個數小,就交換位置。
- 從前向後兩兩比較,一直到比較最後兩個數據。最終最大數被交換到最後的位置,這樣第一個最大數的位置就排好了。
- 繼續重複上述過程,依次將第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);
}
其他排序沒有研究貼一下鏈接:排序算法總結