C语言选择排序

初始版:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 10
void quick_sort(int arr[], int start, int end);
int partition(int arr[], int low, int high);
void select_sort(int arr[],int n);
int main() {
    int i = 0;
    int arr[N] = {1,33,5,2,5,66,2,7,7,85};
    for (int i = 0; i < 10; i++)
    {
        printf("%d\t", arr[i]);
    }
    printf("\n");
    int n = sizeof(arr) / sizeof(arr[0]);

    select_sort(arr,n);
    for (int i = 0; i < 10; i++)
    {
        printf("%d\t", arr[i]);
    }
    printf("\n");
    return 0;
}
//选择排序
void select_sort(int arr[],int n) {
    int min=0,i=0,j=0,index=0;
    bool status = false;
    for (int i = 0; i < n-1;i++) {
        if (arr[i]<arr[i+1]) {
            min = arr[i];
        }
        else {
            min = arr[i + 1];
            status = true;
        }
    
        for (int j = i+1;j < n; j++) {
        
            if(arr[j] < min){
                min = arr[j];
                status = true;        
                index = j;
            }            
        }    
        if (status) {
            
            arr[index] = arr[i];
            arr[i] = min;    
        }        
        status = 0;
    }
}

改进版

//选择排序
/*
这里改进的思想是在循环比较的过程中找到最小值的位置,然后退出里面的一层循环后再进行数据交换
*/
void select_sort(int arr[],int n) {
    int minindex = 0, i = 0, j = 0;
    
    for (int i = 0; i < n-1;i++) {
        
        minindex = i;
    
        for (int j = i+1;j < n; j++) {
            if (arr[j]<arr[minindex]) {
                minindex = j;
            }
                
        }    
        if (minindex!=i) {
            int temp = arr[minindex];
            arr[minindex] = arr[i];
            arr[i] = temp;    
        }        
        
    }
}

 

posted @ 2022-04-22 10:26  蛋混小  阅读(65)  评论(0)    收藏  举报