給你介紹4種排序方法及源碼,供參考
10余年的環江網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網站的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整環江建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯從事“環江網站設計”,“環江網站推廣”以來,每個客戶項目都認真落實執行。
1.冒泡排序
主要思路: 從前往后依次交換兩個相鄰的元素,大的交換到后面,這樣每次大的數據就到后面,每一次遍歷,最大的數據到達最后面,時間復雜度是O(n^2)。
public?static?void?bubbleSort(int[]?arr){
for(int?i?=0;?i??arr.length?-?1;?i++){
for(int?j=0;?j??arr.length-1;?j++){
if(arr[j]??arr[j+1]){
arr[j]?=?arr[j]^arr[j+1];
arr[j+1]?=?arr[j]^arr[j+1];
arr[j]?=?arr[j]^arr[j+1];
}
}
}
}
2.選擇排序
主要思路:每次遍歷序列,從中選取最小的元素放到最前面,n次選擇后,前面就都是最小元素的排列了,時間復雜度是O(n^2)。
public?static?void?selectSort(int[]?arr){
for(int?i?=?0;?i?arr.length?-1;?i++){
for(int?j?=?i+1;?j??arr.length;?j++){
if(arr[j]??arr[i]){
arr[j]?=?arr[j]^arr[i];
arr[i]?=?arr[j]^arr[i];
arr[j]?=?arr[j]^arr[i];
}
}
}
}
3.插入排序
主要思路:使用了兩層嵌套循環,逐個處理待排序的記錄。每個記錄與前面已經排好序的記錄序列進行比較,并將其插入到合適的位置,時間復雜度是O(n^2)。
public?static?void?insertionSort(int[]?arr){
int?j;
for(int?p?=?1;?p??arr.length;?p++){
int?temp?=?arr[p];???//保存要插入的數據
//將無序中的數和前面有序的數據相比,將比它大的數,向后移動
for(j=p;?j0??temp?arr[j-1];?j--){
arr[j]?=?arr[j-1];
}
//正確的位置設置成保存的數據
arr[j]?=?temp;
}
}
4.希爾排序
主要思路:用步長分組,每個分組進行插入排序,再慢慢減小步長,當步長為1的時候完成一次插入排序,? 希爾排序的時間復雜度是:O(nlogn)~O(n2),平均時間復雜度大致是O(n^1.5)
public?static?void?shellSort(int[]?arr){
int?j?;
for(int?gap?=?arr.length/2;?gap??0?;?gap/=2){
for(int?i?=?gap;?i??arr.length;?i++){
int?temp?=?arr[i];
for(j?=?i;?j=gap??temparr[j-gap];?j-=gap){
arr[j]?=?arr[j-gap];
}
arr[j]?=?temp;
}
}
}
快速排序:
package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;
/**
* @author treeroot
* @since 2006-2-2
* @version 1.0
*/
public class QuickSort implements SortUtil.Sort{
/* (non-Javadoc)
* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
*/
public void sort(int[] data) {
quickSort(data,0,data.length-1);
}
private void quickSort(int[] data,int i,int j){
int pivotIndex=(i+j)/2;
//swap
SortUtil.swap(data,pivotIndex,j);
int k=partition(data,i-1,j,data[j]);
SortUtil.swap(data,k,j);
if((k-i)1) quickSort(data,i,k-1);
if((j-k)1) quickSort(data,k+1,j);
}
/**
* @param data
* @param i
* @param j
* @return
*/
private int partition(int[] data, int l, int r,int pivot) {
do{
while(data[++l]pivot);
while((r!=0)data[--r]pivot);
SortUtil.swap(data,l,r);
}
while(lr);
SortUtil.swap(data,l,r);
return l;
}
}
改進后的快速排序:
package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;
/**
* @author treeroot
* @since 2006-2-2
* @version 1.0
*/
public class ImprovedQuickSort implements SortUtil.Sort {
private static int MAX_STACK_SIZE=4096;
private static int THRESHOLD=10;
/* (non-Javadoc)
* @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
*/
public void sort(int[] data) {
int[] stack=new int[MAX_STACK_SIZE];
int top=-1;
int pivot;
int pivotIndex,l,r;
stack[++top]=0;
stack[++top]=data.length-1;
while(top0){
int j=stack[top--];
int i=stack[top--];
pivotIndex=(i+j)/2;
pivot=data[pivotIndex];
SortUtil.swap(data,pivotIndex,j);
//partition
l=i-1;
r=j;
do{
while(data[++l]pivot);
while((r!=0)(data[--r]pivot));
SortUtil.swap(data,l,r);
}
while(lr);
SortUtil.swap(data,l,r);
SortUtil.swap(data,l,j);
if((l-i)THRESHOLD){
stack[++top]=i;
stack[++top]=l-1;
}
if((j-l)THRESHOLD){
stack[++top]=l+1;
stack[++top]=j;
}
}
//new InsertSort().sort(data);
insertSort(data);
}
/**
* @param data
*/
private void insertSort(int[] data) {
int temp;
for(int i=1;idata.length;i++){
for(int j=i;(j0)(data[j]data[j-1]);j--){
SortUtil.swap(data,j,j-1);
}
}
}
}
課表數據時存儲于數據庫中的嗎?
/**
* 獲取一周的時間集合(從周一到周日)
* @param weekNum ;-1:上周;0:本周;1:下周
*/
public static ListDate getWeekDates(int weekNum){
ListDate list = new ArrayListDate();
Calendar cal = Calendar.getInstance();
// 獲取指定下幾個星期
cal.add(Calendar.DAY_OF_WEEK, weekNum * 7);
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
list.add(cal.getTime());
for(int i = 0;i 6;i++){
cal.add(Calendar.DAY_OF_WEEK, 1);
list.add(cal.getTime());
}
return list;
}
這個是獲取這一周時間的代碼 ,之后用下面的代碼獲取周一到周日的日期
ListDate ds = DateUtil.getNowWeekDates(weekNum);
ds.get(0)//周一
ds.get(6)//周日
用這兩個時間到數據庫中進行范圍查詢,之后的你應該明白了吧
public class IdUtil {
public static void main(String[] args) {
//七天的課程
String[] week = new String[7];
//每天的課程名
week[0] = "語文,語文,語文,語文,語文,語文,語文,語文,語文,語文";
week[1] = "數學,數學,數學,數學,數學,數學,數學,數學,數學,數學";
week[2] = "外語,外語,外語,外語,外語,外語,外語,外語,外語,外語";
week[3] = "物理,物理,物理,物理,物理,物理,物理,寂寞學,物理,物理";
week[4] = "化學,化學,化學,化學,化學,化學,化學,化學,化學,化學";
week[5] = "生物,生物,生物,生物,生物,生物,生物,生物,生物,生物";
week[6] = "寂寞學,寂寞學,寂寞學,寂寞學,寂寞學,寂寞學,寂寞學,寂寞學,寂寞學,寂寞學";
//上課時間
String[] time = {"8:00","9:00","8:00","8:00","8:00","8:00","8:00","8:00","8:00","8:00"};
for(int a=1;a8;a++){
System.out.print("\t"+"星期"+a);
}
System.out.println();
int b = 0;
for(int i=1;i11;i++){
switch (i) {
case 1:
System.out.println("上午");
break;
case 5:
System.out.println("下午");
break;
case 9:
System.out.println("晚上");
break;
}
System.out.print(time[i-1]+"\t");
for(int j=0;j7;j++){
System.out.print(week[j].split(",")[b]+"\t");
}
System.out.println();
b++;
}
}
}
先簡單的分析過程,然后貼出代碼.
一:分析文件
文件信息第一行 "5" 表示后面有5條信息
學生信息有5行,每一行使用了逗號隔開
學生信息的后面是排序的規則1代表 按照第一列排序,2代表按照第二列排序,..A代表正序,D代表倒序.
關于排序還要注意分析文檔,比如按照課程名排序,如果 課程名相同,那么 就按照成績從低到高排列
文件信息末尾行 "0" 表示文檔結束
二:關于排序的語法;
1: 傳統的排序語法, 可以使用匿名內部類, 但是顯得比較繁瑣,
2:java8后可以使用流處理加上lambda表達式來簡化代碼.
三: 代碼到網盤下載百度網盤代碼下載7天有效
源文件說明 運行Test.java 即可看到效果
網站標題:java排序課程表代碼 java排序課程表代碼怎么用
瀏覽路徑:http://vcdvsql.cn/article48/hejdep.html
成都網站建設公司_創新互聯,為您提供小程序開發、App開發、網站制作、網頁設計公司、網站改版、Google
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯