2015. 3. 24. 16:44ㆍIT/HTML
** C#으로 짠 알고리즘정렬입니다.
** 밑에 있는것은 선택정렬 삽입정렬 버블정렬 퀵 정렬 모두 한코드에서 돌아가는 프로그램입니다.
////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;
namespace sort
{
public class run
{
private string str;
private int[] arr = new int[9] { 3, 5, 8, 2, 1, 6, 4, 9, 7 };
public run()
{
while (str != "q")
{
menushow();
str = Console.ReadLine();
switch (str)
{
case "1":
selectionsort(arr);
break;
case "2":
insertsort(arr);
break;
case "3":
bubblesort(arr);
break;
case "4":
printarr();
Console.WriteLine("퀵 정렬 과정 ");
quicksort(arr,0,arr.Length-1);
break;
case "5":
minival(arr);
break;
case "6":
maxval(arr);
break;
case "q":
Console.WriteLine("종료");
break;
default :
Console.WriteLine("다시 입력하세요");
break;
}
}
}
private void menushow()
{
Console.WriteLine("===============");
Console.WriteLine("1 . 선택정렬");
Console.WriteLine("2 . 삽입정렬");
Console.WriteLine("3 . 버블정렬");
Console.WriteLine("4 . 퀵 정렬");
Console.WriteLine("5 . 최 소 값");
Console.WriteLine("6 . 최 대 값");
Console.WriteLine("q . 종 료");
Console.WriteLine("===============");
Console.Write("메뉴 선택 : ");
}
private void selectionsort(int[] arr) // int[9] { 3, 5, 8, 2, 1, 6, 4, 9, 7 }에 배열을 인자로받음
{
int[] s_arr = arr; // s_arr을 arr로 초기화
printarr(); // 초기 배열값 보여주는 함수 호출
Console.WriteLine("선택 정렬 과정 ");
for (int i = 0; i < s_arr.Length - 1; i++) // 배열길이 만큼 포 루프문 수행
{
for (int j = i+1; j < s_arr.Length; j++) // j초기값을 i+1 로 둬서 포루프 문 수행
{
if (s_arr[j] < s_arr[i]) // 만약 인덱스[i] 와 인덱스 [i+1] 과 비교해서
//뒤에값이 작으면 값교환
{
swap(s_arr, j, i);
}
}
printarr(s_arr); //선택 정렬 과정 출력
}
}
private void insertsort(int[] arr) // int[9] { 3, 5, 8, 2, 1, 6, 4, 9, 7 }에 배열을 인자로받음
{
int[] i_arr = arr; // i_arr을 arr로 초기화
printarr(); // 초기 배열값 보여주는 함수 호출
Console.WriteLine("삽입 정렬 과정 ");
for (int i = 1; i < i_arr.Length; i++) // 배열길이 만큼 포 루프문 수행
{
for (int j = i; j > 0; j--) // j초기값을 i 로 둬서 감소 포루프 문 수행
{
if (i_arr[j - 1] > i_arr[j]) // i_arr[j-1] 이 i_arr[j] 보다 클때
// j-1 과 j 인덱스 값에 위치를 교환
{
swap(i_arr, j - 1, j);
}
else
{
break; // 만약 j-1 이 j 값보다 작을때 break.
}
printarr(i_arr);
}
//삽입 정렬 과정 출력
}
}
private void bubblesort(int[] arr) // int[9] { 3, 5, 8, 2, 1, 6, 4, 9, 7 }에 배열을 인자로받음
{
int[] b_arr = arr; // b_arr을 arr로 초기화
printarr(); // 초기 배열값 보여주는 함수 호출
Console.WriteLine("버블 정렬 과정 ");
for (int i = 0; i < b_arr.Length; i++) // 배열길이 만큼 포 루프문 수행
{
for (int j = 1; j < b_arr.Length - i; j++) //초기값 1로 해서 (배열길이 - i) 만큼
{
if (b_arr[j-1] > b_arr[j]) // 초기값 1로 (배열길이-1) 만큼 j-1과 j 인덱스값 비교
// 후 j-1이 크면 값 교환
{
swap(b_arr, j - 1, j);
}
}
printarr(b_arr); //버블 정렬 과정 출력
}
}
private void quicksort(int[] arr, int left, int right)
// int[9] { 3, 5, 8, 2, 1, 6, 4, 9, 7 }에 배열과 , 왼쪽커서 , 오른쪽커서 을 인자로 받음
// 왼쪽커서 초기값은 0 , 오른쪽커서 초기값은 (배열길이-1)
{
int[] q_arr = arr; // q_arr을 arr로 초기화
int lastlow; //lastlaw 왼쪽커서 변수선언
if (left >= right ) // 왼쪽 커서 와 오른쪽커서와 교차하면 리턴
return;
lastlow = left;
for (int i = left + 1; i <= right; i++) //왼쪽커서가 오른쪽커서와 같거나 클때 까지 포문 수행
{
if (q_arr[i] < q_arr[left]) //피봇 값과 왼쪽커서를 비교해서 피봇값보다 작으면 피봇과 swap
{
swap(q_arr, ++lastlow, i);
}
}
swap(q_arr,lastlow,left); // 재귀 함수 호출 피봇을 중앙으로 위치
quicksort(q_arr, left, lastlow - 1); // 피봇을 중앙으로 왼쪽에 값들을 정렬
quicksort(q_arr, lastlow + 1, right); // 피봇을 중앙으로 오른쪽 값들을 정렬
printarr(q_arr); //퀵 정렬 과정 출력
}
private void minival(int[] arr) // int[9] { 3, 5, 8, 2, 1, 6, 4, 9, 7 }에 배열을 인자로받음
{
int[] m_arr = arr; // m_arr을 arr로 초기화
printarr(); // 초기 배열값 보여주는 함수 호출
int min = m_arr[0]; //첫번째 배열 값 min 초기화
for (int i = 1; i < m_arr.Length; i++) //배열길이만큼 포문 수행
{
if (m_arr[i] < min)
{
min = m_arr[i]; // 배열길이 만큼 min 을 비교해서 가장 작은 값을 비교해서
// min값에 초기화
}
}
Console.WriteLine("배열 최소값 : " + min);
}
private void maxval(int[] arr) // int[9] { 3, 5, 8, 2, 1, 6, 4, 9, 7 }에 배열을 인자로받음
{
int[] n_arr = arr; // n_arr을 arr로 초기화
printarr(); // 초기 배열값 보여주는 함수 호출
int max = n_arr[0]; //첫번째 배열 값 max 초기화
for (int i = 1; i < n_arr.Length; i++)
{
if (n_arr[i] > max)
{
max = n_arr[i]; // 배열길이 만큼 max 을 비교해서 가장 큰 값을 비교해서
// max값에 초기화
}
}
Console.WriteLine("배열 최대값 : " + max);
}
private void printarr() // 배열 최초값 출력함수
{
arr[0] = 3;
arr[1] = 5;
arr[2] = 8;
arr[3] = 2;
arr[4] = 1;
arr[5] = 6;
arr[6] = 4;
arr[7] = 9;
arr[8] = 7;
Console.Write("초기 배열 : { ");
for (int i = 0; i < arr.Length; i++)
{
Console.Write("{0} ",arr[i]);
}
Console.Write("}");
Console.WriteLine();
}
private void printarr(int[] arr)// 정렬 결과 출력함수
{
int [] complete_arr = arr;
Console.Write("{ ");
for (int i = 0; i < complete_arr.Length; i++)
{
Console.Write("{0} ", complete_arr[i]);
}
Console.Write("}");
Console.WriteLine();
}
private void swap(int[] arr, int i, int j) //swapping 함수
{
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
class main
{
static void Main(string[] args)
{
run r = new run(); //run 객체 생성
}
}
}
'IT > HTML' 카테고리의 다른 글
동영상 Yutube 제목 및 상태바 노출 여부, showinfo, controls (0) | 2015.03.24 |
---|---|
새창 팝업창 소스 (0) | 2015.03.24 |
폼쓰기 (0) | 2015.03.24 |