|
发表于 2020-12-23 22:02:00
|
显示全部楼层
- // 对于序列{15, 9, 7, 8, 20, -1, 4}进行排序,进行一趟后数据序列为{4, 9, -1, 8, 20, 7, 15},则采用的是什么排序?
- // 选择法排序
- #if(0)
- # include<stdio.h>
- void swap(int *p,int *q)
- {
- int temp;
- temp = *p;
- *p = *q;
- *q = temp;
- }
- int main()
- {
- int i,j,min;
- int array[7] = {15,9,7,8,20,-1,4};
- for(i = 0;i < 6;i++) //从首位开始,最后一个数被动和前面所有数进行了比较
- {
- min = i;
- for(j = i + 1;j < 7;j++) //依次和后面的数比较找出最小的数
- {
- if(array[j] < array[min])
- {
- min = j;
- }
- }
- if(min != i) //如果最小的数不是首位,则交换
- {
- swap(&array[min],&array[i]);
- }
- }
- for(i = 0;i < 7;i++)
- {
- printf("%d ",array[i]);
- }
- printf("\n");
- }
- #endif
- // 快速法排序
- #if(0)
- #include <stdio.h>
- #include <stdlib.h>
- void swap(int *a, int *b)
- {
- int temp;
- temp = *a;
- *a = *b;
- *b = temp;
- }
- void quickSort(int arr[] ,int start, int end)
- {
- int arrBase, arrMiddle;
- int tempStart = start,
- tempEnd = end;
- //对于这种递归的函数,内部必须要有一个函数返回的条件
- if(tempStart >= tempEnd)
- return;
- //拷贝一个基准值作为后面比较的参数
- arrBase = arr[start];
- while(start < end)
- {
- while(start < end && arr[end] > arrBase)
- {
- end--;
- }
- if(start < end)
- {
- swap(&arr[start], &arr[end]);
- start++;
- }
- while(start < end && arr[start] < arrBase)
- {
- start++;
- }
- if(start < end)
- {
- swap(&arr[start], &arr[end]);
- end--;
- }
- }
- arr[start] = arrBase;
- arrMiddle = start;
- //分治方法进行递归
- quickSort(arr,tempStart,arrMiddle-1);
- quickSort(arr,arrMiddle+1,tempEnd);
- }
- int main()
- {
- int i;
- int array[7] = {15,9,7,8,20,-1,4};
- int arrLength = sizeof(array)/sizeof(int);
- quickSort(array,0,arrLength-1);
- for(i = 0; i < arrLength; i++)
- {
- printf("%d ",array[i]);
- }
- printf("\n");
- return 0;
- }
- #endif
- // 希尔法排序
- #if(0)
- # include<stdio.h>
- void shell_sort(int arr[],int size)
- {
- int i,j,k,temp;
- for(i = size / 2;i > 0;i /= 2)
- {
- for(j = i;j < size;j++)
- {
- temp = arr[j];
- for(k = j - i;k >= 0 && temp < arr[k];k -= i)
- {
- arr[k + i] = arr[k];
- }
- arr[k + i] = temp;
- }
- }
- for(i = 0;i < size;i++)
- {
- printf("%d ",arr[i]);
- }
- printf("\n");
- }
- void main()
- {
- int array[7] = {15,9,7,8,20,-1,4};
- shell_sort(array,7);
- }
- #endif
- // 冒泡法排序
- #if(1)
- # include<stdio.h>
- int main()
- {
- int array[7] = {15,9,7,8,20,-1,4};
- int n; // 存放数组a中元素的个数
- int i; // 比较的轮数
- int j; // 每轮比较的次数
- int buf; // 交换数据时用于存放中间数据
- n = sizeof(array) / sizeof(array[0]); // a[0]是int型, 占4字节, 所以总的字节数除以4等于元素的个数
- for (i = 0; i < n - 1;++i) // 比较n-1轮
- {
- for (j = 0; j < n - 1 - i;++j) // 每轮比较n-1-i次,
- {
- if (array[j] > array[j + 1])
- {
- buf = array[j];
- array[j] = array[j + 1];
- array[j + 1] = buf;
- }
- }
- }
- for (i = 0;i < n;++i)
- {
- printf("%d, ",array[i]);
- }
- printf("\n");
- return 0;
- }
- #endif
复制代码 |
|