选择排序时间复杂度也为O(n^2)
选择排序即每次length-i的长度内选择一个最小的元素,与第一个进行替换,这样大循环length次后,就可以得到排好序的数组了。
void selectSort(int *arr,int length){ int i,j,k,min; for(i=0;i<length;i++){ min = i; for(j=i+1;j<length;j++){ if(arr[j] <arr[min]) min = j; } if(min != i){ k = arr[i]; arr[i] = arr[min]; arr[min] = k; } } }
#include <stdio.h> #include <stdlib.h> int arrtest[10] = {3,4,7,8,0,9,1,2,6,5}; //int arrtest[10] = {0,1,2,3,4,5,6,7,8,9}; //int arrtest[10] = {9,8,7,6,5,4,3,2,1,0}; void copy(int *arr,int length); void print(int *arr,int length); void selectSort(int *arr,int length); int main(){ int Arr[10]; copy(Arr,10); print(Arr,10); selectSort(Arr,10); print(Arr,10); getchar(); return 0; } void selectSort(int *arr,int length){ int i,j,k,min; for(i=0;i<length;i++){ min = i; for(j=i+1;j<length;j++){ if(arr[j] <arr[min]) min = j; } if(min != i){ k = arr[i]; arr[i] = arr[min]; arr[min] = k; } } } void copy(int *arr,int length){ int i; for(i=0;i<length;i++){ arr[i] = arrtest[i]; } } void print(int *arr,int length){ int i; for(i=0;i<length;i++){ printf("%d ",arr[i]); } printf("\n"); }