10大排序演算法(C語言實現)

2021-10-19 02:25:28 字數 2966 閱讀 4945

大一剛放寒假期間,回想一下馬上進入大學時的心情,記得在暑假時加了乙個學校acm戰隊的群,當時感覺很美好,想開學的時候努力一下進入校隊的acm。可是自己又特別喜歡滲透,於是就把acm這個想法放下了,這幾天把sqllabs幹完了,出於閒想看看演算法。記得當時寫c課設的時候,氣泡排序也把我整一段時間才迷糊過來。好,廢話不多說,記錄一下自己的學習成果。

這些總結是根據菜鳥教程上的知識,加上自己的實驗和思考的成果。 十大經典排序演算法.在這裡我先說一下:下邊所有的演算法排序結果都從大到小

演算法思路:

這個演算法了解過的非常好理解,大致說下就是:比較相鄰資料,如果不符合規則(大的數在前或者小的數在前)就交換著兩個數的位置。但是如果資料是:6,5,7(要求是大的數在前)根據上述所說的,得到的結果:6,7,5。這顯然不符合要求,需要再經過一次迴圈才可得到正確的序列。因此氣泡排序的根本是:(如果要求序列是大的數在前)經過一次遍歷迴圈後最小的數交換到整個資料的末尾。依次類推第二個小的數就在整個資料的倒數第二位,最後最大的數就在第一位。排序成功。

#include void bubble_sort(int arr, int len) }}

}int main() ;

int len = (int) sizeof(arr) / sizeof(*arr);

bubble_sort(arr, len);

int i;

for (i = 0; i < len; i++)

return 0;

}

演算法思路:

假設第乙個資料最大,遍歷這個資料後邊的所有資料,發現後邊有資料大於這乙個資料,記錄較大的資料,繼續往後遍歷直到遍歷一遍所有資料,之後交換資料,此時第乙個資料即為整個資料的最大數。依次類推,假設第二個資料最大,遍歷這個資料後邊的所有資料,發現後邊有資料大於這乙個資料,記錄較大的資料,繼續往後遍歷直到遍歷一遍所有資料,之後交換資料。

#includeint main() 

; int i=0,j=0,max;

int temp,len=7;

for(i = 0;ia[max]) //將假設的當前最大值與後面的值比較

}//當前最大值

if(max != i) //比較之後如果此次迴圈中最大值並非當前值

}for(int q=0 ; q<7; q++)

printf("%d ",a[q]);

}

演算法思路:(為了具有普遍性,在此假設前3個資料已經過插入排序成為正序)

取出第四個資料,此時第四個資料的位置空出,如果第三個資料小於第四個資料,將第三個資料換到第四個資料的位置,此時第三個資料位置空出,如果仍小於,則以此類推。如果不小於則將取出的這個資料放到第三個資料的位置。

#includeint main()

; int i,j,key,len=7;

for(i=1;i=0) && (arr[j]int main()

; int gap, i, j,len=7;

int temp;

for (gap = len >> 1; gap > 0; gap >>= 1)

arr[j + gap] = temp;

}} for(int q=0 ; q<7; q++)

printf("%d ",arr[q]);

}

#include#includeint min(int x, int y) 

int main()

,len=7;

int *a = arr;

int *b = (int *) malloc(len * sizeof(int));

int seg, start;

for (seg = 1; seg < len; seg += seg)

int *temp = a;

a = b;

b = temp;

}if (a != arr)

free(b);

for(int q=0 ; q<7; q++)

printf("%d ",arr[q]);

}

十大經典排序演算法

十大經典排序演算法

#include #include #include void print_arr(int *arr, int n) 

void counting_sort(int *ini_arr, int *sorted_arr, int n)

int main(int argc, char **ar**)

十大經典排序演算法

#include#define max 20

//#define showpass

#define base 10

void print(int *a, int n)

}void radixsort(int *a, int n)

} while (m / exp > 0) ;

for (i = 0; i < n; i++)

for (i = 1; i < base; i++)

for (i = n - 1; i >= 0; i--)

for (i = 0; i < n; i++)

exp *= base;

#ifdef showpass

printf("\npass : ");

print(a, n);

#endif

}}int main()

printf("\narray : ");

print(&arr[0], n);

radixsort(&arr[0], n);

printf("\nsorted : ");

print(&arr[0], n);

printf("\n");

return 0;

}

十大排序之選擇排序 排序演算法 C語言實現

選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是 第一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小 大 元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。選擇排序是不穩定...

十大排序之希爾排序 C語言實現 排序演算法

在這裡我們要提出逆序對的相關問題,設 a 為乙個有 n 個數字的有序集 n 1 其中所有數字各不相同。如果存在正整數 i,j 使得 1 i j n 而且 a i a j 則 這個有序對稱為 a 的乙個逆序對,也稱作逆序數。例如,陣列 3,1,4,5,2 的逆序對有 3,1 3,2 4,2 5,2 共...

十大排序之插入排序 排序演算法 C語言實現

插入排序,一般也被稱為直接插入排序。對於少量元素的排序,它是乙個有效的演算法 插入排序是一種最簡單的排序方法,它的基本思想是將乙個記錄插入到已經排好序的有序表中,從而乙個新的 記錄數增1的有序表。在其實現過程使用雙層迴圈,外層迴圈對除了第乙個元素之外的所有元素,內層迴圈對當前元素前面有序表進行待插入...