冒泡排序
冒泡排序是一种简单的排序算法,它需要重复的查找每个元素,两两比较,然后交换顺序,知道没有元素需要交换,排序完成。
算法原理
1.比较相邻的两个元素,如果前一个比后一个大,则交换顺序
2.对每一对元素执行比较
3.针对所有元素重复以上步骤
原始代码如下
#include <stdio.h>
void bubble_sort(int arr[], int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
int main() {
int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
int len = (int) sizeof(arr) / sizeof(*arr);
bubble_sort(arr, len);
int i;
for (i = 0; i < len; i++)
printf("%d ", arr[i]);
return 0;
}
鸡尾酒排序
鸡尾酒排序也是冒泡排序的改良版,其原理与冒泡排序一样
算法原理
正向与冒泡排序一样,然后再加上反向查找的功能
原始代码如下
void sort(int arr[])
{
for(int i=0;i<arr.length-1;i++){
boolean isSort = true;
for(int j=0;j<arr.length-1-i;j++){
int temp = 0;
if(arr[j] < arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
isSort = false;
}
}
if(isSort){
break;
}
}
}
选择排序
选择排序即在所有数中找到最小的一个,放在数组的第一个位置,然后继续在剩余的数中找到最小的数
原始代码如下
void swap(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void selection_sort(int arr[], int len)
{
int i,j;
for (i = 0 ; i < len - 1 ; i++)
{
int min = i;
for (j = i + 1; j < len; j++)
if (arr[j] < arr[min])
min = j;
swap(&arr[min], &arr[i]);
}
}