簡單的排序算法總結

快速排序

/*
*快速排序的遞歸實現
*/
# include <stdio.h>
# define N 8
int Quick_sort_Partion(int R[],int left,int right)//用遞歸方法把R[left]至R[right]的記錄進行快速排序
{
int temp,buf;//臨時變量
int i=left,j=right;
while(left<right)/*從兩端交替向中間掃描,直至low和high相等時爲止*/
{
buf=R[left];//將區間的第一個記錄作爲基準置入臨時單元中
while(left<right&&buf<=R[right])/*從右向左進行掃描,查找第1個小於基準值的數據元素*/
right--;
/*交換數據元素x[low]和x[high]*/
temp=R[right];
R[right]=R[left];
R[left]=temp;
while(left<right&&buf>=R[left])/*從左向右進行掃描,查找第1個大於基準值的數據元素*/
left++;
if(left==right)
return left;
else{
/*交換數據元素x[low]和x[high]*/
temp=R[right];
R[right]=R[left];
R[left]=temp;
}

}

}

void Quick_sort(int R[],int left,int right)/*定義快速排序函數*/
{
int temp;
if(left<right){
temp=Quick_sort_partion(R,left,right);//劃分左、右子序列
Quick_Sort(R,left,temp-1);//遞歸調用,對左子序列進行快速排序
Quick_Sort(R,temp+1,right);//遞歸調用,對右子序列進行快速排序

}

}
//測試程序
int main(void){
int i;
int X[N]={26,23,96,13,36,67,45,15};
Quick_Sort(X,0,7);
for(i=0;i<8;i++)
print ("%d",X[i]);
printf("\n");

}

插入排序

# include <stdio.h>
# define N 8
void Insert_Sort(int X[],int n)//插入排序(升序)
{
int temp;
int i,j;
for(i=1;i<n;i++){
temp=X[i];//取出無序序列中的一個元素
for(j=i;temp<X[j-1]&&j>=0;j--)//在已排序的序列中從後向前掃描
 {
   X[j]=X[j-1];//插入位置後的數據元素後移
 }
 X[j]=temp;//數據插入有序序列中
}
}
//測試程序
int main(void)
{
int i;
int X[N]={26,23,96,13,36,67,45,15};

Insert_Sort(X,N);

for(i=0;i<8;i++)
printf("%d",X[i]);

}

冒泡排序

void Bubble_Sort(int X[],int n)//冒泡排序(升序)
{
int i,j;
int temp;
for(i=n;i>1;i--)//進行n-1趟排序
{
for(j=0;j<i-1;j++)//每趟排序進行i-1次數據判斷
{
if(X[j]>X[j+1])//比較相鄰兩個數據元素
{
//交換數據元素
temp=X[j];
X[j]=X[j+1];
X[j+1]=temp;
}
}
}
}
//測試程序
int main(void)
{
int i;
int X[N]={26,23,96,13,36,67,45,15};
Bubble_Sort(X,N);

for(i=0;i<8;i++)
printf("%d",X[i]);

}

選擇排序

void Select_Sort(int X[],int n)//選擇排序
{
int i,j,k;
int temp;
for(i=0;i<n-1;i++)//進行n-1趟排序,每趟選出1個最小記錄
{
k=i;
for(j=i+1;j<n;j++)//在其他數據元素中繼續查找最小數據
{
if(X[k]>X[j])//記錄最小數據元素的位置
k=j;
}
//數據交換
if(k!=i)
{
temp=X[k];
X[k]=X[i];
X[i]=temp;
}
}
//測試程序
int main(void)
{
int i;
int X[N]={26,23,96,13,36,67,45,15};
Select_Sort(X,N);

for(i=0;i<8;i++)
printf("%d",X[i]);

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