排序算法是算法裏面的基礎,算法主要是考驗思維,在這裏會介紹三個簡單的算法:直接插入排序,選擇排序,冒泡排序。
直接插入排序
直接插入排序經過 n-1 次循環將需要排序的元素排序好,每一次循環依次添加一個後面的新元素到前面排好序的元素中,時間複雜度爲(n^2)。代碼如下
/*
直接插入排序
參數:需要排序的數組,數組中元素的個數
返回值:無
*/
void Zhi_Jie(int a[],int num)
{
int n,m,z,k;
for(n = 0;n < num;n++)
{
z = a[n];
m = n-1;
while((m >= 0) && (z < a[m]))
{
// a[m+1] = a[m--];//方法一,一步到位,讓人看得更加清楚,下面是分解的寫法
k = a[m+1];
a[m+1] = a[m];
a[m] = k;
m--;
}
a[m+1] = z;//找到了要插入的位置
}
}
選擇排序:
選擇排序也是經過n-1次循環將需要排序的元素排序好,每一次循環是尋找後面元素中最小/最大的元素,插入到前面排好序的後面,時間複雜度爲(n^2)。代碼如下
/*
選擇排序實現排序
參數:需要排序的數組,數組中元素的個數
返回值:無
*/
void Xuan_Ze(int a[],int num)
{
int m,n,z,k;
for(m = 0;m < num-1;m++)
{
z = m;
for(n = m+1;n < num;n++)
if(a[z] > a[n])
z = n;
if(m != z)//標誌位發生了變換,說明大小發生的改變
{
k = a[z];
a[z] = a[m];
a[m] = k;
}
}
}
冒泡排序
冒泡排序也是經過n-1次循環將需要排序的元素排序好,每一次循環找到最大/最小的元素,移動到後面排好序的元素前,時間複雜度爲(n^2)。代碼如下
/*
冒泡的方法實現排序
參數:需要排序的數組,數組中元素的個數
返回值:無
*/
void Mao_Pao(int a[],int num)
{
int m,n,z;
for(m = 0;m < num;m++)
for(n = m+1;n < num;n++)
if(a[m] > a[n])
{
z = a[m];
a[m] = a[n];
a[n] = z;
}
}
接下來就是主函數的了,代碼如下:
#include"stdio.h"
//宏定義數組中元素的個數
#define test_num 5
//這裏加上上面寫的函數即可。
int main()
{
int a[test_num];
int i;
printf("請輸入%d個數字,每輸入完一個就回車一次:\n",test_num);
for(i = 0;i < test_num;i++)
{
scanf("%d",&a[i]);
}
printf("你輸入的數字是 :");
for(i = 0;i < test_num;i++)
{
printf("%d ",a[i]);
}
printf("\n");
//排序操作
// Mao_Pao(a,test_num);
// Zhi_Jie(a,test_num);
// Xuan_Ze(a,test_num);
printf("排序之後的順序爲 :");
for(i = 0;i < test_num;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
排序算法重在思維上的理解,理解好了之後操作起來就不難了,這三個都是比較基礎的排序算法,有問題或者有建議的小夥伴可以添加我的個人微信 lqy—1997 (中間是三個英文的槓)或者留言進行交流。