C++でクイックソートのコードを書いてみた

code-2620118_640

宿題で、クイックソートのコードを書きました。クイックソートとは、要素の列からある基準値を設け、それより大きいグループと小さいグループに分割し、次にそれぞれのグループで同様の操作を繰りかえすことによってソートを行うアルゴリズムです。

{42513}の順に並んだ数字が{12345}の順になれば正解です。

#include <iostream>
#define N 5//データ件数

int data[N] = { 4,2,5,1,3 };

void quicksort(int left, int right) {//クイックソートの実施
int i, j, value, tmp;

if (left >= right) {
return;
}

value = data[left];
i = left + 1;
j = right;

while (i <= j){

while ((i <= j) && (data[i] <= data[left])){
i++;
}
while ((i <= j) && (data[j] > data[left])) {
j–;
}

if(i<j){
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
i++;
j–;
}
}

tmp = data[left];
data[left] = data[j];
data[j] = tmp;

quicksort(left, j – 1);
quicksort(j + 1, right);
}

int main() {

quicksort(0, N – 1);

int i;
for(i = 0; i < N; i++){
printf(“%d”, data[i]);
  }
}
こんなに長いコードは初めて書きました。50行くらいでしょうか。出力は以下の通りです。

12345

やさしいC++ 第5版 (「やさしい」シリーズ)
高橋 麻奈
SBクリエイティブ
2017-06-14