几种常用的排序方法

来源:互联网 发布:社交网络 完整版 编辑:程序博客网 时间:2024/06/06 07:01

                                 几种常用的排序方法

1.冒泡排序

冒泡排序算法的运作如下:(比如按从小到大排列)

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素作第一步中的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个。

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

       eg:如果sz个数我们只需要比较(sz-1)轮,每轮的次数也在减少,为(sz-1-轮数)。

程序如下:

#define _CRT_SECURE_NO_WARNINGS 1#include<string.h>#include<stdio.h>#include<iostream>void bubble_sort(int *arr, int sz){int i = 0;int j = 0;for (i = 0; i < sz - 1; i++){for (j = 0; j < sz - 1 - i; j++){if (*(arr+j)>*(arr+j + 1)){int k = 0;k = *(arr + j);*(arr + j) = *(arr + j + 1);*(arr + j + 1) = k;}}}}int main(){int a[10];int i = 0;int sz = sizeof(a) / sizeof(a[0]);printf("input 10 numbers:\n");for (i = 0; i < sz; i++){scanf("%d", &a[i]);}bubble_sort(a, sz);printf("the sorted numbers:\n");for (i = 0; i < 10; i++){printf("%d ", a[i]);}printf("\n");system("pause");return 0;}

运行结果如下:

        eg:冒泡排序排序多个字符串,和上面道理一样,我们利用库函数strcmp来比较字符串。

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>#include<iostream>void bubble_sort(char *str[],int n){int i, j;for (i = 0; i < n-1; i++){for (j = 0; j < n - i - 1; j++){if (strcmp(*(str + j), *(str + j + 1))>0){char* tmp = *(str + j);*(str + j )= *(str + j + 1);*(str + j + 1)= tmp;}}}}int main(){char* arr[] = {"abh","agu","ghu","bhk","sic"};int i = 0;int sz = sizeof(arr)/sizeof(arr[0]);bubble_sort(arr,sz);for (i = 0; i < sz; i++){printf("%s\n", arr[i]);}system("pause");return 0;}
这里arr的元素为char型的指针,传参传的是每个字符串的首元素地址。


2.选择排序








原创粉丝点击