黑马程序员技术交流社区

标题: 选择排序的两种方法 [打印本页]

作者: 4B青年    时间: 2015-7-5 19:41
标题: 选择排序的两种方法
  1. #include <stdio.h>
  2. //选择排序的第一种方法,跟冒泡排序法有点像,两两交换
  3. void selectSort(int arr[],int len){
  4.     //写双重循环
  5.     int temp;
  6.     for (int i=0; i<len-1; i++) {
  7.         for (int j=i+1; j<len; j++) {
  8.             //交换的条件
  9.             if(arr[i]>arr[j]){
  10.                 //让arr[i] 和 arr[j]  进行交换
  11.                 temp = arr[i];
  12.                 arr[i] = arr[j];
  13.                 arr[j] = temp;
  14.             }
  15.         }
  16.     }
  17. }
  18. //选择排序的第二种方法,只交换一次,因此更高效
  19. void otherSort(int arr[],int len){
  20.     //写双重循环
  21.     int temp,min;
  22.     for (int i=0; i<len; i++) {
  23.         //每次假设a[i]是最小值
  24.         min = i;
  25.         for (int j=i+1; j<len; j++) {
  26.             if (arr[j]<arr[min]) {
  27.                 //找到最小的那个元素的下标
  28.                 min = j;
  29.             }
  30.         }
  31.         //如果找不到比arr[i]小的数,就不再交换
  32.         if (i != min) {
  33.             //将第i+1个元素与最小的元素交换
  34.             temp = arr[i];
  35.             arr[i] = arr[min];
  36.             arr[min] = temp;
  37.         }
  38.     }
  39. }
  40. int main(int argc, const char * argv[]) {
  41.     //定义一个数组
  42.     int a[10]={23,12,4,67,20,100,21,45,3,28};
  43.     int b[10]={23,12,4,67,20,100,21,45,3,28};
  44.     //目的排序
  45.     selectSort(a, 10);
  46.     otherSort(b, 10);
  47.     //遍历输出数组
  48.     for (int i=0; i<10; i++) {
  49.         printf("%d\t",a[i]);
  50.     }
  51.     printf("\n");
  52.     for (int i=0; i<10; i++) {
  53.         printf("%d\t",b[i]);
  54.     }
  55.     return 0;
  56. }
复制代码

作者: 杨庆庆    时间: 2015-7-5 20:22
赞一下。。。

作者: 小年轻不见了    时间: 2015-7-5 20:38
牛掰!!!!!!!
作者: 弹剑    时间: 2015-7-5 21:31
这个有点意思啊
作者: pp584995727    时间: 2015-7-6 06:27
不错,顶顶顶
作者: 赵云18235802528    时间: 2015-7-6 07:12
赞赞赞赞赞赞




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2