实现一个选择排序程序,排序整型数组

来源:互联网 发布:淘宝网看手机 编辑:程序博客网 时间:2024/05/20 10:53

        实现一个选择排序程序,排序整型数组。

       首先明白什么是选择排序,选择排序是指,每一次在待排序数列中,选择一个最大的(或最小的)放到数列的最前端,然后再用这种方法排列后面的数列。

      下面用选择排序实现从小到大排序,程序代码如下:

#include <stdio.h>#include <assert.h>#include <Windows.h>void show(int arr[], int length)   //打印数组函数{int i = 0;for (i = 0; i < length; i++){printf("%d ", arr[i]);}printf("\n");}int Myline(int arr[], int length){                                             //选择排序函数(由小到大排序)assert(arr);int i = 0;int k = 0;int j = 0;for (j = 0; j < length - 1; j++){int min = j;k = j;for (i = j+1; i < length; i++){if (arr[min]>arr[i])    //如果前一个数值大于它后面的{min = i;     //把小的下标记下k = min;}}if (k!=j)    //当前数不是最小的,交换当前数和比较的数列里最小的数{arr[j] = arr[j] ^ arr[k];arr[k] = arr[j] ^ arr[k];arr[j] = arr[j] ^ arr[k];}}}int main(){int a[] = { 2, 3, 4, 5, 1, 8, 45 , 6, 0};    //输入要比较的数列int len = sizeof(a) / sizeof(a[0]);show(a, len);Myline(a, len);show(a, len);system("pause");return 0;}

运行结果如下:


        程序也可以从大到小排序,只需把判别条件改为  if(arr[min] < arr[i])即可,此处忽略min的真实意思,把它当做序列内最大的数。程序中用的是max,比较符合意思,
程序如下,原理和由小到大排序一模一样:
#include <stdio.h>#include <assert.h>#include <Windows.h>void show(int arr[], int length)   //打印数组函数{int i = 0;for (i = 0; i < length; i++){printf("%d ", arr[i]);}printf("\n");}int Myline(int arr[], int length){                                             //选择排序函数assert(arr);int i = 0;int k = 0;int j = 0;for (j = 0; j < length - 1; j++){int min = j;k = j;for (i = j+1; i < length; i++){if (arr[max]<arr[i])    //如果前一个数值小于它后面的{max = i;     //把大的下标记下k = max;}}if (k!=j)    //当前数不是最大的,交换当前数和比较的数列里最大的数{arr[j] = arr[j] ^ arr[k];arr[k] = arr[j] ^ arr[k];arr[j] = arr[j] ^ arr[k];}}}int main(){int a[] = { 2, 3, 4, 5,1,8, 45 ,6,0};    //输入要比较的数列int len = sizeof(a) / sizeof(a[0]);show(a, len);Myline(a, len);show(a, len);system("pause");return 0;}

运行结果如下:


1 0
原创粉丝点击