- #include <stdio.h>
- //选择排序的第一种方法,跟冒泡排序法有点像,两两交换
- void selectSort(int arr[],int len){
- //写双重循环
- int temp;
- for (int i=0; i<len-1; i++) {
- for (int j=i+1; j<len; j++) {
- //交换的条件
- if(arr[i]>arr[j]){
- //让arr[i] 和 arr[j] 进行交换
- temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
- }
- }
- }
- //选择排序的第二种方法,只交换一次,因此更高效
- void otherSort(int arr[],int len){
- //写双重循环
- int temp,min;
- for (int i=0; i<len; i++) {
- //每次假设a[i]是最小值
- min = i;
- for (int j=i+1; j<len; j++) {
- if (arr[j]<arr[min]) {
- //找到最小的那个元素的下标
- min = j;
- }
- }
- //如果找不到比arr[i]小的数,就不再交换
- if (i != min) {
- //将第i+1个元素与最小的元素交换
- temp = arr[i];
- arr[i] = arr[min];
- arr[min] = temp;
- }
- }
- }
- int main(int argc, const char * argv[]) {
- //定义一个数组
- int a[10]={23,12,4,67,20,100,21,45,3,28};
- int b[10]={23,12,4,67,20,100,21,45,3,28};
- //目的排序
- selectSort(a, 10);
- otherSort(b, 10);
- //遍历输出数组
- for (int i=0; i<10; i++) {
- printf("%d\t",a[i]);
- }
- printf("\n");
- for (int i=0; i<10; i++) {
- printf("%d\t",b[i]);
- }
- return 0;
- }
复制代码 |
|