第一步:序列中的第一個元素保留,第二個元素和它比較,比它大放在前面,比它小方在後面。
第二步:保留第一第二個元素,第三個與第二個比較,比它大插入到前面,比它小插入到後面。
其他步如第二步一樣,直到排序完成。
c語言程式碼如下:
int insort(int a[],int n)
{
int i,j;
for(i=2;i<=n;i++)
{
s[0]=s[i];
j=i-1;
while(s[0]<s[j])
{
s[j+1]=s[j];
j--;
}
s[j+1]=s[0];
}
return 0;
}
該方法實質上是一種分組插入方法
C語言程式碼如下:
int shsort(int s[], int n) /* 自定義函數 shsort()*/
{
int i,j,d;
d=n/2; /*確定固定增雖值*/
while(d>=1)
{
for(i=d+1;i<=n;i++) /*陣列下標從d+1開始進行直接插入排序*/
{
s[0]=s[i]; /*設定監視哨*/
j=i-d; /*確定要進行比較的元素的最右邊位置*/
while((j>0)&&(s[0]<s[j]))
{
s[j+d]=s[j]; /*數據右移*/
j=j-d; /*向左移d個位置V*/
}
s[j + d]=s[0]; /*在確定的位罝插入s[i]*/
}
d = d/2; /*增裡變爲原來的一半*/
}
return 0;
}
選擇排序是一種直觀的排序思想,簡單來說,就是從未排序的數列中找出最小的元素,放在起始地址,接下來在從剩下未排序的數列中選擇次小的元素放在第二位置,
接下來,以此類推
#include <stdio.h>
int main()
{
int i,j,t,a[11]; //定義變數及陣列爲基本整型
printf("請輸入10個數:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]); //從鍵盤中輸入要排序的10個數字
for(i=1;i<=9;i++)
for (j=i+1;j<=10;j++)
if(a[i]>a[j]) //如果前一個數比後一個數大,則利用中間變數t實現兩值互換
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
printf("排序後的順序是:\n");
for(i=1;i<=10;i++)
printf("%5d", a[i]); //輸出排序後的陣列
printf("\n");
return 0;
}
通過一次排序將要排序的數據分割成獨立的兩部分,將序列分爲兩部分的中間數作爲基準(par),基準左邊的數都要比基準右邊的數要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞回進行,以此達到整個數據變成有序序列。
int qusort(int s[],int start,int end) //自定義函數 qusort()
{
int i,j; //定義變數爲基本整型
i=start; //將每組首個元素賦給i
j = end; //將每組末尾元素賦給j
s[0]=s[start]; //設定基準值
while(i<j)
{
while(i<j&&s[0]<s[j])
j--; //位置左移
if(i<j)
{
s[i]=s[j]; //將s[j]放到s[i]的位置上
i++; //位置右移
}
while(i<j&&s[i]<=s[0])
i++; //位置左移
if(i<j)
{
s[j]=s[i]; //將大於基準值的s[j]放到s[i]位置
j--; //位置左移
}
}
s[i]=s[0]; //將基準值放入指定位置
if (start<i)
qusort(s,start,j-1); //對分割出的部分遞回呼叫qusort()函數
if (i<end)
qusort(s,j+1,end);
return 0;
}
# include <stdio.h>
int main(void)
{
int a[] = {900, 2, 3, -58, 34, 76, 32, 43, 56, -70, 35, -234, 532, 543, 2500};
int n; //存放陣列a中元素的個數
int i; //比較的輪數
int j; //每輪比較的次數
int buf; //交換數據時用於存放中間數據
n = sizeof(a) / sizeof(a[0]); /*a[0]是int型, 佔4位元組, 所以總的位元組數除以4等於元素的個數*/
for (i=0; i<n-1; ++i) //比較n-1輪
{
for (j=0; j<n-1-i; ++j) //每輪比較n-1-i次,
{
if (a[j] < a[j+1])
{
buf = a[j];
a[j] = a[j+1];
a[j+1] = buf;
}
}
}
for (i=0; i<n; ++i)
{
printf("%d\x20", a[i]);
}
printf("\n");
return 0;
}