基本思想: 两两比较相邻记录的关键字,如果反序则交换
时间复杂度: 最好为O(n),最坏为O(n^2)。
代码实现:
void fun(int a[], int N)
{
int i, j ,temp;
for (i = 0; i < N- 1; i++)
for (j = N - 2; j >= i; j--)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
基本思想: 通过一趟排序将待排序记录分割成独立的两个部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对两部分记录继续进行排序,以达到整个序列有序的目的。
时间复杂度: O(nlogn)
代码实现:
参考代码: https://blog.csdn.net/peng_apple/article/details/79725298
#include<stdio.h>
void quick_sort(int num[], int low, int high)//递归实现快速排序
{
int left, right, key;
left = low;
right = high;
key = num[low];
if (low<high)
{
while (left<right)
{
while (left<right && num[right] >= key)
right--;
num[left] = num[right];
while (left<right && num[left] <= key)
left++;
num[right] = num[left];
}
num[left] = key;
quick_sort(num, low, left - 1);
quick_sort(num, left + 1, high);
}
}
int main(void)
{
int num[] = { 2,5,9,77,2446,3,444,84445,33,10 };
int high = (sizeof(num) / sizeof(num[0])) - 1;
int low = 0;
int i;
for (i = 0; i <= high ; i++)// 排序前遍历
{
printf("%d, ", num[i]);
}
printf("\n");
quick_sort(num,low,high);//递归排序
for (i = 0; i <= high; i++)//排序后遍历
{
printf("%d, ", num[i]);
}
return 0;
}