#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void SelSort(int A[], int n) //氣泡排序法之副程式
{
int i, j, k, Temp;
for(k=0; k<n; k++)
{
printf("%d ",A[k]);
}
printf("\n ");
for (i = 0; i < n-1; i++)
{
for (j = 0; j < (n-1)-i; j++)
{
if (A[j] > A[j+1])
{
//相鄰兩個的資料交換位置
Temp = A[j];
A[j] = A[j+1];
A[j+1] = Temp;
}
for(k=0; k<n; k++)
{
printf("%d ",A[k]);
}
printf("\n ");
}
}
return;
}
int main()
{
int A[6]= {3,78,4,52,34,1};
int n = 6;
SelSort( A, n);
return 0;
}
選擇排序(Selection sorting)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void SelSort(int A[], int n) //選擇排序法之副程式
{
int i, j, k, Temp;
for(k=0; k<n; k++)
{
printf("%d ",A[k]);
}
printf("\n ");
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (A[i] > A[j])
{
Temp = A[i];
A[i] = A[j];
A[j] = Temp;
}
for(k=0; k<n; k++)
{
printf("%d ",A[k]);
}
printf("\n ");
}
}
return;
}
int main()
{
int A[6]= {3,78,4,52,34,1};
int n = 6;
SelSort( A, n);
return 0;
}
插入排序(Insertion sorting)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void InSort(int A[], int n) //插入排序法之副程式
{
int i, j, k, Temp;
for (i = 1; i < n; i++)
{
for(k=0; k<n; k++)
{
printf("%d ",A[k]);
}
printf("\n ");
Temp=A[i];
j=i-1;
while (Temp<A[j])
{
A[j+1]=A[j];
A[j]=Temp;
j--;
for(k=0; k<n; k++)
{
printf("%d ",A[k]);
}
printf("\n ");
if(j==-1)
break;
}
A[j+1]=Temp;
}
return;
}
int main()
{
int A[6]= {3,78,4,52,34,1};
int n = 6;
InSort( A, n);
return 0;
}
快速排序(Quick sorting)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define n 6 //特別用此n的目的是要印出排序法的過程給大家看,然而程式碼中的right是會變動的,所以另外定義n為6(代表本序列的大小)
void QuickSort(int A[], int left, int right)
{
int i, j, p, k, Temp;
if(left < right)
{
p = A[(left+right)/2]; //pivot→其取點位置是可以自行定義的,有些人是直接取right當作pivot
printf("pivot = %d\n",p);
i = left - 1;
j = right + 1;
for(k=0; k<n; k++)
{
printf("%d ",A[k]);
}
printf("\n ");
while(1)
{
while(A[++i] < p); // 向右找
while(A[--j] > p); // 向左找
if(i >= j) break;
Temp = A[i];
A[i] = A[j];
A[j] = Temp;
}
for(k=0; k<n; k++)
{
printf("%d ",A[k]);
}
printf("\n ");
QuickSort(A, left, i-1); // 對左邊進行遞迴
QuickSort(A, j+1, right); // 對右邊進行遞迴
}
return;
}
int main()
{
int A[6]= {3,78,4,52,34,1};
int left = 0,right = 5;
QuickSort( A, left, right);
system("pause");
return 0;
}
- 以right當作pivot的範例,這裡需注意:right在
QuickSort(A, left, i-1);
其值會漸漸往左邊靠攏,這是因為i-1的關係,等等大家可以看圖了解會更清楚
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define n 6 //特別用此n的目的是要印出排序法的過程給大家看,然而程式碼中的right是會變動的,所以另外定義n為6(代表本序列的大小)
void QuickSort(int A[], int left, int right)
{
int i, j, p, k, Temp;
if(left < right)
{
p = A[right]; //pivot→取位置為最後面一個的例子
printf("pivot = %d\n",p);
i = left - 1;
j = right + 1;
for(k=0; k<n; k++)
{
printf("%d ",A[k]);
}
printf("\n ");
while(1)
{
while(A[++i] < p); // 向右找
while(A[--j] > p); // 向左找
if(i >= j) break;
Temp = A[i];
A[i] = A[j];
A[j] = Temp;
}
for(k=0; k<n; k++)
{
printf("%d ",A[k]);
}
printf("\n ");
QuickSort(A, left, i-1); // 對左邊進行遞迴
QuickSort(A, j+1, right); // 對右邊進行遞迴
}
return;
}
int main()
{
int A[6]= {3,78,4,52,34,1};
int left = 0,right = 5;
QuickSort( A, left, right);
system("pause");
return 0;
}
堆積排序(Heap sorting)
薛爾排序(Shell sorting)
合併排序(Merge sorting)





沒有留言:
張貼留言