⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultsort.java

📁 dm s preparing process. In this case we use O distance.
💻 JAVA
字号:
/* created at 2006-1-3 */
package com.clustering.core.support;

import java.util.Comparator;
import java.util.Iterator;

/**
 * 这个类的加入减小了类的粒度,增加了在创建GeneratingTree时所使用的比较的灵活性, 但这个类是被要求提出的,原因就是要看排序.
 * <P>
 * 这个排序是简单的选择排序,但选择排序不会发生,直到通过迭代器访问时,并且迭代器提取一个元素,该方法排出一个记录,该排序稳定
 * 由于DefaultSort不支持记录排序信息,所以在SimpleGeneratingTree中没有被使用,如果以后想更新SimpleGeneratingTree的
 * 排序算法,那么就考虑用这个
 * 
 * @author Avon
 * @version 0.9
 * @since 0.9
 */
public class DefaultSort implements Sort {
	private Comparator comparator;

	private Object[] sortingSequence;

	private boolean isDecending;

	/*
	 * CharArrayWriter cWriter;
	 * 
	 * PrintWriter out;
	 */

	public DefaultSort() {
		comparator = null;
		sortingSequence = null;
		isDecending = true;
		/*
		 * cWriter = new CharArrayWriter(); out = new PrintWriter(cWriter);
		 * out.println("Sorting sequence. Here the program only log the records
		 * which has been sorted. " + "But not the whole sequence's sorting
		 * result.");
		 */
	}

	/**
	 * 是用比较起Comparator按照isDecending对sortingSequence中的元素排序
	 * 
	 * @param sortingSequence
	 * @param isDecending
	 * @param comparator
	 */
	public DefaultSort(Object[] sortingSequence, boolean isDecending, Comparator comparator) {
		this();
		this.sortingSequence = sortingSequence;
		this.isDecending = isDecending;
		this.comparator = comparator;
	}

	public void setComparator(Comparator comparator) {
		this.comparator = comparator;
	}

	public Comparator getComparator() {
		return comparator;
	}

	public void setSortingSequence(Object[] sequence) {
		sortingSequence = sequence;
	}

	public Object[] getSortingSequence() {
		return sortingSequence;
	}

	public boolean isDescending() {
		return isDecending;
	}

	public void setDescending(boolean isDescending) {
		this.isDecending = isDescending;
	}

	public Iterator iterator() {
		return new IteratorImpl();
	}

	/*
	 * @Override public String toString() { out.close(); cWriter.close(); return
	 * cWriter.toString(); }
	 */
	private class IteratorImpl implements Iterator {
		int count;

		boolean[] isSorted;

		IteratorImpl() {
			count = 0;
			if (null == comparator)
				for (int i = 0; i < sortingSequence.length; i++) {
					if (!Comparable.class.isAssignableFrom(sortingSequence[i].getClass()))
						throw new UnsupportedOperationException("U did not set Comparator and the object" + i
								+ " in sorting sequence does not implements Comparable. "
								+ "Sorting can not be proceeded until u specify a compartor or "
								+ "all elements in sorting sequence implements Comparable.");
				}
			isSorted = new boolean[sortingSequence.length];
			// 有必要这么做
			for (int i = 0; i < isSorted.length; i++) {
				isSorted[i] = false;
			}
		}

		public boolean hasNext() {
			return count < sortingSequence.length;
		}

		@SuppressWarnings("unchecked")
		public Object next() {
			count++;
			int tmp = 0;
			// 找第一个未排过续的元素做tmp
			for (int i = 0; i < isSorted.length; i++) {
				if (!isSorted[i])
					tmp = i;
			}
			if (null != comparator) {
				for (int i = 0; i < sortingSequence.length; i++) {
					if (isSorted[i])
						continue;
					// 降序找大的
					if (isDecending) {
						if (comparator.compare(sortingSequence[i], sortingSequence[tmp]) > 0)
							tmp = i;
					}
					// 升序找小的
					else {
						if (comparator.compare(sortingSequence[i], sortingSequence[tmp]) < 0)
							tmp = i;
					}
				}
			} else {
				for (int i = 0; i < sortingSequence.length; i++) {
					if (isSorted[i])
						continue;
					// 降序找大的
					if (isDecending) {
						if (((Comparable) sortingSequence[i]).compareTo(sortingSequence[tmp]) > 0)
							tmp = i;
					}
					// 升序找小的
					else {
						if (((Comparable) sortingSequence[i]).compareTo(sortingSequence[tmp]) < 0)
							tmp = i;
					}
				}
			}
			/*
			 * // ! 没有办法添加坐标 因此不能在此处记录排序信息 out.printf("pow=%.3f",
			 * sortingSequence[tmp]); if (count % 5 == 0) out.println();
			 */
			return sortingSequence[tmp];
		}

		public void remove() {
			throw new UnsupportedOperationException("Sorting process of dataming does not allow u to modify data.");
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -