首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序算法

排序算法
EN

Code Review用户
提问于 2022-05-31 09:57:06
回答 1查看 60关注 0票数 0

我用C编写了这个排序算法。它在每次迭代时都会查找带有最大值的元素,并将其添加到数组的末尾,并与其他较小的元素交换。这样,通过几乎n交换,就可以对n元素数组进行排序。

代码语言:javascript
复制
#include <stdio.h>

int max(int arr1[],int l){
    int max = 0;

    for(int i = 0; i <= l;i++)
        max = (arr1[i] > arr1[max]) ? (i) : (max);

    return max;
}

void swap(int arr[], int a,int b){

    if(arr[a] != arr[b]){
    arr[a] += arr[b];
    arr[b] = arr[a] - arr[b];
    arr[a] -= arr[b];
    }

}

int main(){

    int arr[] = {1,5,7,2,8,9,10,32,4};
    int len = sizeof(arr) / sizeof(arr[0]);

    for(int i = 0; i < len; i++)
        swap(arr,(len - i - 1),max(arr,(len - i -1)));

    printf("\nSorted Array:\n");

    for(int i = 0; i < len;i++)
        printf("%d ",arr[i]);

}

任何建议/建设性的批评都是非常欢迎的。我是初学者,请指出我犯的任何错误。

EN

回答 1

Code Review用户

发布于 2022-05-31 11:06:37

我发现您的代码不够清晰,至少在我看来是如此,这主要是由于命名方面的问题。

max()不返回最大值,而是返回最大值的索引。一个更有意义的名字将有助于可读性。

swap()使用一种相当缺乏表现力的方法交换数组中的两个条目--中间int与之交换值有什么问题?

您可以按自己的方式工作,但是使用基于增量的循环。

我会让其他人来批评实际的排序算法,不过我不知道在数组实际排序之后是否可以提供早期退出。

我手头没有C编译器,但下面是我使用Java进行的修订的草图,在本例中,这可能已经足够接近说明了。

代码语言:javascript
复制
package codeReview;

import java.util.Arrays;

public class MaxSort {

  private static int indexOfMaxElement(int arr1[], int limit) {
    int maxIndex = 0;

    for (int i = 0; i <= limit; i++) {
      maxIndex = (arr1[i] > arr1[maxIndex]) ? (i) : (maxIndex);
    }

    return maxIndex;
  }

  private static void swap(int arr[], int limit, int maxIndex) {

    if (arr[limit] != arr[maxIndex]) {
      int swap = arr[limit];
      arr[limit] = arr[maxIndex];
      arr[maxIndex] = swap;
    }

  }

  public static void main(String[] args) {

    int array[] = {1, 5, 7, 2, 8, 8, 9, 10, 32, 4, 4};
    int len = array.length;

    for (int limit = len-1; limit > 0; limit--) {
       swap(array, limit, indexOfMaxElement(array, limit));
    }

    System.out.println("Sorted Array:");
    System.out.println(Arrays.toString(array));
  }
}
票数 0
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/276977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档